xfs
[Top] [All Lists]

[PATCH 5/5] xfs: fix xfs_quiesce_data

To: xfs@xxxxxxxxxxx
Subject: [PATCH 5/5] xfs: fix xfs_quiesce_data
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Sun, 26 Apr 2009 10:03:10 -0400
References: <20090426140305.113371000@xxxxxxxxxxxxxxxxxxxxxx>
User-agent: quilt/0.47-1
We need to do a synchronous xfs_sync_fsdata to make sure the superblock
actually is on disk when we return.  While we're at it also remove the
superflous SYNC_BDFLUSH flag to xfs_sync_inodes, and move the 
xfs_filestream_flush
call later [hch: why?  seems unrelated].


Index: linux-2.6/fs/xfs/linux-2.6/xfs_sync.c
===================================================================
--- linux-2.6.orig/fs/xfs/linux-2.6/xfs_sync.c  2009-04-26 10:46:17.112949525 
+0200
+++ linux-2.6/fs/xfs/linux-2.6/xfs_sync.c       2009-04-26 10:48:19.713979813 
+0200
@@ -323,16 +323,16 @@ xfs_quiesce_data(
        int error;
 
        /* push non-blocking */
-       xfs_sync_inodes(mp, SYNC_DELWRI|SYNC_BDFLUSH);
+       xfs_sync_inodes(mp, SYNC_DELWRI);
        XFS_QM_DQSYNC(mp, SYNC_BDFLUSH);
-       xfs_filestream_flush(mp);
 
-       /* push and block */
+       /* push and block till complete */
        xfs_sync_inodes(mp, SYNC_DELWRI|SYNC_WAIT|SYNC_IOWAIT);
        XFS_QM_DQSYNC(mp, SYNC_WAIT);
+       xfs_filestream_flush(mp);
 
        /* write superblock and hoover up shutdown errors */
-       error = xfs_sync_fsdata(mp, 0);
+       error = xfs_sync_fsdata(mp, SYNC_WAIT);
 
        /* flush data-only devices */
        if (mp->m_rtdev_targp)

<Prev in Thread] Current Thread [Next in Thread>