Commit 3cc49884 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Darrick J. Wong
Browse files

xfs: remove xfs_buf_ioerror_retry



Merge xfs_buf_ioerror_retry into its only caller to make the resubmission
flow a little easier to follow.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent f58d0ea9
Loading
Loading
Loading
Loading
+12 −21
Original line number Diff line number Diff line
@@ -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;