OSDN Git Service

xfs: kill xfs_bdstrat_cb
authorDave Chinner <dchinner@redhat.com>
Wed, 1 Oct 2014 23:04:40 +0000 (09:04 +1000)
committerDave Chinner <david@fromorbit.com>
Wed, 1 Oct 2014 23:04:40 +0000 (09:04 +1000)
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>
fs/xfs/xfs_buf.c

index 170d6c0..0eee0f1 100644 (file)
@@ -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);