Skip to content

Commit

Permalink
xfs: enforce synchronous writes in xfs_bwrite
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Christoph Hellwig authored and Alex Elder committed May 19, 2010
1 parent df308bc commit 8c38366
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 12 deletions.
17 changes: 6 additions & 11 deletions fs/xfs/linux-2.6/xfs_buf.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
1 change: 0 additions & 1 deletion fs/xfs/linux-2.6/xfs_sync.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down

0 comments on commit 8c38366

Please sign in to comment.