aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorDave Chinner <david@fromorbit.com>2009-10-06 16:29:27 -0400
committerAlex Elder <aelder@sgi.com>2009-10-08 13:00:36 -0400
commitc90b07e8dd9f263d2e2af1d9648ba269f4d0d8fd (patch)
treea2dd23b15d74f1ea338394c545ae5d569a1fb557 /fs
parentf9581b1443abac50c90168301d40a7734b13a5dc (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>
Diffstat (limited to 'fs')
-rw-r--r--fs/xfs/linux-2.6/xfs_sync.c8
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)