Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c38366f authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Alex Elder
Browse files

xfs: enforce synchronous writes in xfs_bwrite



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: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAlex Elder <aelder@sgi.com>
parent df308bcf
Loading
Loading
Loading
Loading
+6 −11
Original line number Diff line number Diff line
@@ -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);
	}

	return error;
}

+0 −1
Original line number Diff line number Diff line
@@ -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);
}