Re: [PATCH v1 6/7] xfs: Rewrite retried read

From: Darrick J. Wong
Date: Wed Nov 28 2018 - 00:26:17 EST


On Wed, Nov 28, 2018 at 04:17:19PM +1100, Dave Chinner wrote:
> On Tue, Nov 27, 2018 at 08:49:50PM -0700, Allison Henderson wrote:
> > If we had to try more than one mirror to get a successful
> > read, then write that buffer back to correct the bad mirro
> >
> > Signed-off-by: Allison Henderson <allison.henderson@xxxxxxxxxx>
> > ---
> > fs/xfs/xfs_buf.c | 8 ++++++++
> > 1 file changed, 8 insertions(+)
> >
> > diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> > index f102d01..81f6491 100644
> > --- a/fs/xfs/xfs_buf.c
> > +++ b/fs/xfs/xfs_buf.c
> > @@ -847,6 +847,14 @@ xfs_buf_read_map(
> >
> > }
> > retry_done:
> > +
> > + /*
> > + * if we had to try more than one mirror to sucessfully read
> > + * the buffer, write the buffer back
> > + */
> > + if (!bp->b_error && i > 0)
> > + xfs_bwrite(bp);
> > +
>
> This can go in the case statement on retry and then you don't need
> to check for i > 0 or, well, bp->b_error. i.e.
>
> swtich (bp->b_error) {
> case -EBADCRC:
> case -EIO:
> case -EFSCORRUPTED:
> /* try again from different copy */
> continue;
> 0:
> /* good copy, rewrite it to repair bad copy */
> xfs_bwrite(bp);

Some day we might want to provide some controls for how long we'll retry
these reads and whether or not we automatically rewrite buffers, since
some administrators might prefer fast fail to get failover started.

(Not now though)

--D

> /* fallthrough */
> default:
> return bp;
> }
>
> Cheers,
>
> Dave.
> --
> Dave Chinner
> david@xxxxxxxxxxxxx