]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
xfs: enforce synchronous writes in xfs_bwrite
authorChristoph Hellwig <hch@infradead.org>
Fri, 12 Mar 2010 10:59:40 +0000 (10:59 +0000)
committerAlex Elder <aelder@sgi.com>
Wed, 19 May 2010 14:58:13 +0000 (09:58 -0500)
xfs_bwrite is used with the intention of synchronously writing out
buffers, but currently it does not actually clear the async flag if
that's left from previous writes but instead implements async
behaviour if it finds it.  Remove the code handling asynchronous
writes as we've got rid of those entirely outside of the log and
delwri buffers, and make sure that we clear the async and read flags
before writing the buffer.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Alex Elder <aelder@sgi.com>
fs/xfs/linux-2.6/xfs_buf.c
fs/xfs/linux-2.6/xfs_sync.c

index f7ecc44cbbd36558126ed5c54e3ca358a2ae7dfc..f01de3c55c43e8ed7effa08d8b5a324e18c4bd2a 100644 (file)
@@ -1007,25 +1007,20 @@ xfs_bwrite(
        struct xfs_mount        *mp,
        struct xfs_buf          *bp)
 {
-       int                     iowait = (bp->b_flags & XBF_ASYNC) == 0;
-       int                     error = 0;
+       int                     error;
 
        bp->b_strat = xfs_bdstrat_cb;
        bp->b_mount = mp;
        bp->b_flags |= XBF_WRITE;
-       if (!iowait)
-               bp->b_flags |= _XBF_RUN_QUEUES;
+       bp->b_flags &= ~(XBF_ASYNC | XBF_READ);
 
        xfs_buf_delwri_dequeue(bp);
        xfs_buf_iostrategy(bp);
 
-       if (iowait) {
-               error = xfs_buf_iowait(bp);
-               if (error)
-                       xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR);
-               xfs_buf_relse(bp);
-       }
-
+       error = xfs_buf_iowait(bp);
+       if (error)
+               xfs_force_shutdown(mp, SHUTDOWN_META_IO_ERROR);
+       xfs_buf_relse(bp);
        return error;
 }
 
index 728db015f39c677a487053fa2c8566296fbd076c..3884e20bc14e523276e855a51e97167ba3f68cbc 100644 (file)
@@ -372,7 +372,6 @@ xfs_sync_fsdata(
        if (XFS_BUF_ISPINNED(bp))
                xfs_log_force(mp, 0);
 
-       XFS_BUF_UNASYNC(bp);
        return xfs_bwrite(mp, bp);
 }