[XFS] avoid race in sync_inodes() that can fail to write out all dirty data
authorLachlan McIlroy <lachlan@sgi.com>
Fri, 12 Oct 2007 01:13:35 +0000 (11:13 +1000)
committerTim Shimmin <tes@chook.melbourne.sgi.com>
Tue, 16 Oct 2007 04:22:28 +0000 (14:22 +1000)
commite893bffd4cf2f000f3058319eea5abeeb1755969
treef72f91742c4e145df11168db118deb5ac2deb2b5
parentc2cba57e83dd7d2dda4ec425998b536669632c82
[XFS] avoid race in sync_inodes() that can fail to write out all dirty data

In xfs_fs_sync_super() treat a sync the same as a filesystem freeze. This
is needed to force the log to disk for inodes which are not marked dirty
in the Linux inode (the inodes are marked dirty on completion of the log
I/O) and so sync_inodes() will not flush them.

In xfs_fs_write_inode() a synchronous flush will not get an EAGAIN from
xfs_inode_flush() and if an asynchronous flush returns EAGAIN we should
pass it on to the caller. If we get an error while flushing the inode then
re-dirty it so we can try again later.

SGI-PV: 971670
SGI-Modid: xfs-linux-melb:xfs-kern:29860a

Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
Signed-off-by: David Chinner <dgc@sgi.com>
Signed-off-by: Tim Shimmin <tes@sgi.com>
fs/xfs/linux-2.6/xfs_super.c