mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 13:44:15 +08:00
xfs: clear the read/write flags later in xfs_buf_ioend
Clear the flags at the end of xfs_buf_ioend so that they can be used during the completion. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
b840e2ada8
commit
55b7d7115f
@ -1283,12 +1283,13 @@ xfs_buf_ioend_handle_error(
|
|||||||
|
|
||||||
resubmit:
|
resubmit:
|
||||||
xfs_buf_ioerror(bp, 0);
|
xfs_buf_ioerror(bp, 0);
|
||||||
bp->b_flags |= (XBF_WRITE | XBF_DONE | XBF_WRITE_FAIL);
|
bp->b_flags |= (XBF_DONE | XBF_WRITE_FAIL);
|
||||||
xfs_buf_submit(bp);
|
xfs_buf_submit(bp);
|
||||||
return true;
|
return true;
|
||||||
out_stale:
|
out_stale:
|
||||||
xfs_buf_stale(bp);
|
xfs_buf_stale(bp);
|
||||||
bp->b_flags |= XBF_DONE;
|
bp->b_flags |= XBF_DONE;
|
||||||
|
bp->b_flags &= ~XBF_WRITE;
|
||||||
trace_xfs_buf_error_relse(bp, _RET_IP_);
|
trace_xfs_buf_error_relse(bp, _RET_IP_);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1297,12 +1298,8 @@ static void
|
|||||||
xfs_buf_ioend(
|
xfs_buf_ioend(
|
||||||
struct xfs_buf *bp)
|
struct xfs_buf *bp)
|
||||||
{
|
{
|
||||||
bool read = bp->b_flags & XBF_READ;
|
|
||||||
|
|
||||||
trace_xfs_buf_iodone(bp, _RET_IP_);
|
trace_xfs_buf_iodone(bp, _RET_IP_);
|
||||||
|
|
||||||
bp->b_flags &= ~(XBF_READ | XBF_WRITE | XBF_READ_AHEAD);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Pull in IO completion errors now. We are guaranteed to be running
|
* Pull in IO completion errors now. We are guaranteed to be running
|
||||||
* single threaded, so we don't need the lock to read b_io_error.
|
* single threaded, so we don't need the lock to read b_io_error.
|
||||||
@ -1310,7 +1307,7 @@ xfs_buf_ioend(
|
|||||||
if (!bp->b_error && bp->b_io_error)
|
if (!bp->b_error && bp->b_io_error)
|
||||||
xfs_buf_ioerror(bp, bp->b_io_error);
|
xfs_buf_ioerror(bp, bp->b_io_error);
|
||||||
|
|
||||||
if (read) {
|
if (bp->b_flags & XBF_READ) {
|
||||||
if (!bp->b_error && bp->b_ops)
|
if (!bp->b_error && bp->b_ops)
|
||||||
bp->b_ops->verify_read(bp);
|
bp->b_ops->verify_read(bp);
|
||||||
if (!bp->b_error)
|
if (!bp->b_error)
|
||||||
@ -1350,6 +1347,8 @@ xfs_buf_ioend(
|
|||||||
xfs_buf_dquot_iodone(bp);
|
xfs_buf_dquot_iodone(bp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bp->b_flags &= ~(XBF_READ | XBF_WRITE | XBF_READ_AHEAD);
|
||||||
|
|
||||||
if (bp->b_flags & XBF_ASYNC)
|
if (bp->b_flags & XBF_ASYNC)
|
||||||
xfs_buf_relse(bp);
|
xfs_buf_relse(bp);
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user