xfs: remove xfs_buf_ioerror_retry
authorChristoph Hellwig <hch@lst.de>
Tue, 1 Sep 2020 17:55:45 +0000 (10:55 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Wed, 16 Sep 2020 03:52:38 +0000 (20:52 -0700)
Merge xfs_buf_ioerror_retry into its only caller to make the resubmission
flow a little easier to follow.

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 4e1adbb..0d4eb06 100644 (file)
@@ -1185,23 +1185,6 @@ xfs_buf_ioerror_alert_ratelimited(
        lasttarg = bp->b_target;
 }
 
-static bool
-xfs_buf_ioerror_retry(
-       struct xfs_buf          *bp,
-       struct xfs_error_cfg    *cfg)
-{
-       if ((bp->b_flags & (XBF_STALE | XBF_WRITE_FAIL)) &&
-           bp->b_last_error == bp->b_error)
-               return false;
-
-       bp->b_flags |= (XBF_WRITE | XBF_DONE | XBF_WRITE_FAIL);
-       bp->b_last_error = bp->b_error;
-       if (cfg->retry_timeout != XFS_ERR_RETRY_FOREVER &&
-           !bp->b_first_retry_time)
-               bp->b_first_retry_time = jiffies;
-       return true;
-}
-
 /*
  * Account for this latest trip around the retry handler, and decide if
  * we've failed enough times to constitute a permanent failure.
@@ -1281,10 +1264,13 @@ xfs_buf_ioend_disposition(
        trace_xfs_buf_iodone_async(bp, _RET_IP_);
 
        cfg = xfs_error_get_cfg(mp, XFS_ERR_METADATA, bp->b_error);
-       if (xfs_buf_ioerror_retry(bp, cfg)) {
-               xfs_buf_ioerror(bp, 0);
-               xfs_buf_submit(bp);
-               return XBF_IOEND_DONE;
+       if (bp->b_last_error != bp->b_error ||
+           !(bp->b_flags & (XBF_STALE | XBF_WRITE_FAIL))) {
+               bp->b_last_error = bp->b_error;
+               if (cfg->retry_timeout != XFS_ERR_RETRY_FOREVER &&
+                   !bp->b_first_retry_time)
+                       bp->b_first_retry_time = jiffies;
+               goto resubmit;
        }
 
        /*
@@ -1299,6 +1285,11 @@ xfs_buf_ioend_disposition(
        /* Still considered a transient error. Caller will schedule retries. */
        return XBF_IOEND_FAIL;
 
+resubmit:
+       xfs_buf_ioerror(bp, 0);
+       bp->b_flags |= (XBF_WRITE | XBF_DONE | XBF_WRITE_FAIL);
+       xfs_buf_submit(bp);
+       return XBF_IOEND_DONE;
 out_stale:
        xfs_buf_stale(bp);
        bp->b_flags |= XBF_DONE;