Only has two callers, and is just a shutdown check and error handler
around xfs_buf_iorequest. However, the error handling is a mess of
read and write semantics, and both internal callers only call it for
writes. Hence kill the wrapper, and follow up with a patch to
sanitise the error handling.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
Dave Chinner 2014-10-02 09:04:40 +10:00 коммит произвёл Dave Chinner
Родитель 61be9c529a
Коммит 8dac392198
1 изменённых файлов: 25 добавлений и 23 удалений

Просмотреть файл

@ -1146,27 +1146,6 @@ xfs_bioerror_relse(
return -EIO;
}
STATIC int
xfs_bdstrat_cb(
struct xfs_buf *bp)
{
if (XFS_FORCED_SHUTDOWN(bp->b_target->bt_mount)) {
trace_xfs_bdstrat_shut(bp, _RET_IP_);
/*
* Metadata write that didn't get logged but
* written delayed anyway. These aren't associated
* with a transaction, and can be ignored.
*/
if (!bp->b_iodone && !XFS_BUF_ISREAD(bp))
return xfs_bioerror_relse(bp);
else
return xfs_bioerror(bp);
}
xfs_buf_iorequest(bp);
return 0;
}
int
xfs_bwrite(
struct xfs_buf *bp)
@ -1178,7 +1157,20 @@ xfs_bwrite(
bp->b_flags |= XBF_WRITE;
bp->b_flags &= ~(XBF_ASYNC | XBF_READ | _XBF_DELWRI_Q | XBF_WRITE_FAIL);
xfs_bdstrat_cb(bp);
if (XFS_FORCED_SHUTDOWN(bp->b_target->bt_mount)) {
trace_xfs_bdstrat_shut(bp, _RET_IP_);
/*
* Metadata write that didn't get logged but written anyway.
* These aren't associated with a transaction, and can be
* ignored.
*/
if (!bp->b_iodone)
return xfs_bioerror_relse(bp);
return xfs_bioerror(bp);
}
xfs_buf_iorequest(bp);
error = xfs_buf_iowait(bp);
if (error) {
@ -1861,7 +1853,17 @@ __xfs_buf_delwri_submit(
xfs_buf_hold(bp);
else
list_del_init(&bp->b_list);
xfs_bdstrat_cb(bp);
if (XFS_FORCED_SHUTDOWN(bp->b_target->bt_mount)) {
trace_xfs_bdstrat_shut(bp, _RET_IP_);
if (!bp->b_iodone)
xfs_bioerror_relse(bp);
else
xfs_bioerror(bp);
continue;
}
xfs_buf_iorequest(bp);
}
blk_finish_plug(&plug);