diff options
author | Dave Chinner <david@fromorbit.com> | 2009-10-06 16:29:27 -0400 |
---|---|---|
committer | Alex Elder <aelder@sgi.com> | 2009-10-08 13:00:36 -0400 |
commit | c90b07e8dd9f263d2e2af1d9648ba269f4d0d8fd (patch) | |
tree | a2dd23b15d74f1ea338394c545ae5d569a1fb557 | |
parent | f9581b1443abac50c90168301d40a7734b13a5dc (diff) |
xfs: fix xfs_quiesce_data
We need to do a synchronous xfs_sync_fsdata to make sure the superblock
actually is on disk when we return.
Also remove SYNC_BDFLUSH flag to xfs_sync_inodes because that particular
flag is never checked.
Move xfs_filestream_flush call later to only release inodes after they
have been written out.
Signed-off-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Alex Elder <aelder@sgi.com>
Signed-off-by: Alex Elder <aelder@sgi.com>
-rw-r--r-- | fs/xfs/linux-2.6/xfs_sync.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/fs/xfs/linux-2.6/xfs_sync.c b/fs/xfs/linux-2.6/xfs_sync.c index 320be6aea492..7647b8db3ca3 100644 --- a/fs/xfs/linux-2.6/xfs_sync.c +++ b/fs/xfs/linux-2.6/xfs_sync.c | |||
@@ -419,14 +419,16 @@ xfs_quiesce_data( | |||
419 | /* push non-blocking */ | 419 | /* push non-blocking */ |
420 | xfs_sync_data(mp, 0); | 420 | xfs_sync_data(mp, 0); |
421 | xfs_qm_sync(mp, SYNC_TRYLOCK); | 421 | xfs_qm_sync(mp, SYNC_TRYLOCK); |
422 | xfs_filestream_flush(mp); | ||
423 | 422 | ||
424 | /* push and block */ | 423 | /* push and block till complete */ |
425 | xfs_sync_data(mp, SYNC_WAIT); | 424 | xfs_sync_data(mp, SYNC_WAIT); |
426 | xfs_qm_sync(mp, SYNC_WAIT); | 425 | xfs_qm_sync(mp, SYNC_WAIT); |
427 | 426 | ||
427 | /* drop inode references pinned by filestreams */ | ||
428 | xfs_filestream_flush(mp); | ||
429 | |||
428 | /* write superblock and hoover up shutdown errors */ | 430 | /* write superblock and hoover up shutdown errors */ |
429 | error = xfs_sync_fsdata(mp, 0); | 431 | error = xfs_sync_fsdata(mp, SYNC_WAIT); |
430 | 432 | ||
431 | /* flush data-only devices */ | 433 | /* flush data-only devices */ |
432 | if (mp->m_rtdev_targp) | 434 | if (mp->m_rtdev_targp) |