xfs: refactor xfs_buf_ioerror_fail_without_retry

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>
This commit is contained in:
Christoph Hellwig 2020-09-01 10:55:44 -07:00 committed by Darrick J. Wong
parent 6a7584b1d8
commit f58d0ea956
1 changed files with 15 additions and 20 deletions

View 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_);