On Thu, Jul 09, 2020 at 05:04:47PM +0200, Christoph Hellwig wrote: > Merge xfs_buf_ioerror_retry into its only caller to make the resubmission > flow a little more obvious. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Not sure about obvious, but at least it's all together again... :) Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --D > --- > fs/xfs/xfs_buf.c | 33 ++++++++++++--------------------- > 1 file changed, 12 insertions(+), 21 deletions(-) > > diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c > index 2f2ce3faab0826..e5592563dda6a1 100644 > --- a/fs/xfs/xfs_buf.c > +++ b/fs/xfs/xfs_buf.c > @@ -1187,23 +1187,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. > @@ -1283,10 +1266,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; > } > > /* > @@ -1301,6 +1287,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; > -- > 2.26.2 >