xfs: refactor xfs_buf_ioerror_fail_without_retry
authorChristoph Hellwig <hch@lst.de>
Tue, 1 Sep 2020 17:55:44 +0000 (10:55 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Wed, 16 Sep 2020 03:52:38 +0000 (20:52 -0700)
xfs_buf_ioerror_fail_without_retry is a somewhat weird function in
that it has two trivial checks that decide the return value, while
the rest implements a ratelimited warning.  Just lift the two checks
into the caller, and give the remainder a suitable name.

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>
fs/xfs/xfs_buf.c

index 19a4996..4e1adbb 100644 (file)
@@ -1170,36 +1170,19 @@ xfs_buf_wait_unpin(
        set_current_state(TASK_RUNNING);
 }
 
-/*
- * Decide if we're going to retry the write after a failure, and prepare
- * the buffer for retrying the write.
- */
-static bool
-xfs_buf_ioerror_fail_without_retry(
+static void
+xfs_buf_ioerror_alert_ratelimited(
        struct xfs_buf          *bp)
 {
-       struct xfs_mount        *mp = bp->b_mount;
        static unsigned long    lasttime;
        static struct xfs_buftarg *lasttarg;
 
-       /*
-        * If we've already decided to shutdown the filesystem because of
-        * I/O errors, there's no point in giving this a retry.
-        */
-       if (XFS_FORCED_SHUTDOWN(mp))
-               return true;
-
        if (bp->b_target != lasttarg ||
            time_after(jiffies, (lasttime + 5*HZ))) {
                lasttime = jiffies;
                xfs_buf_ioerror_alert(bp, __this_address);
        }
        lasttarg = bp->b_target;
-
-       /* synchronous writes will have callers process the error */
-       if (!(bp->b_flags & XBF_ASYNC))
-               return true;
-       return false;
 }
 
 static bool
@@ -1280,7 +1263,19 @@ xfs_buf_ioend_disposition(
        if (likely(!bp->b_error))
                return XBF_IOEND_FINISH;
 
-       if (xfs_buf_ioerror_fail_without_retry(bp))
+       /*
+        * If we've already decided to shutdown the filesystem because of I/O
+        * errors, there's no point in giving this a retry.
+        */
+       if (XFS_FORCED_SHUTDOWN(mp))
+               goto out_stale;
+
+       xfs_buf_ioerror_alert_ratelimited(bp);
+
+       /*
+        * Synchronous writes will have callers process the error.
+        */
+       if (!(bp->b_flags & XBF_ASYNC))
                goto out_stale;
 
        trace_xfs_buf_iodone_async(bp, _RET_IP_);