Re: [PATCH 03/19] xfs: uncached buffer reads need to return an error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 12, 2012 at 09:11:37AM +1100, Dave Chinner wrote:
> On Thu, Oct 11, 2012 at 05:38:02PM -0400, Christoph Hellwig wrote:
> > > index 917e121..dee14eb 100644
> > > --- a/fs/xfs/xfs_fsops.c
> > > +++ b/fs/xfs/xfs_fsops.c
> > > @@ -149,6 +149,11 @@ xfs_growfs_data_private(
> > >  				XFS_FSS_TO_BB(mp, 1), 0, NULL);
> > >  	if (!bp)
> > >  		return EIO;
> > > +	if (bp->b_error) {
> > > +		int	error = bp->b_error;
> > > +		xfs_buf_relse(bp);
> > > +		return error;
> > > +	}
> > >  	xfs_buf_relse(bp);
> > 
> > > +	if (bp->b_error) {
> > > +		error = bp->b_error;
> > > +		if (loud)
> > > +			xfs_warn(mp, "SB validate failed");
> > > +		goto release_buf;
> > > +	}
> > 
> > > +	if (bp->b_error) {
> > > +		error = bp->b_error;
> > > +		xfs_buf_relse(bp);
> > > +		return error;
> > > +	}
> > 
> > > +	if (!bp || bp->b_error) {
> > >  		xfs_warn(mp, "realtime device size check failed");
> > > +		if (bp)
> > > +			xfs_buf_relse(bp);
> > >  		return EIO;
> > >  	}
> > >  	xfs_buf_relse(bp);
> > 
> > It seems like all these callers would be a lot cleaner if we'd just
> > return the error as the return value, and a buffer as an indirect
> > pointer if and only if the read succeeded.
> 
> The number of callers is relatively small, and the knock-on effect
> through the subsequent patches isn't that bad, so changing the
> interface is probably the right thing to do here. I'll rework this
> patch appropriately.

Then again, maybe I won't. I just remembered the main reason for
returning a buffer with an error set on it. That is that there are
circumstances in which we might want to attempt repair of a buffer
that failed verification, and we cannot do that without returning
the buffer.

So even if we return the buffer as an indirect pointer, we'd still
need to return it when particular types of errors are detected on
the buffer (i.e. EFSCORRUPTED from the verifier). Hence the error
handling in xfs_buf_read_uncached() would become more complex and
difficult to get right (e.g. different EIO vs EFSCORRUPTED vs ...
handling) and it wouldn't simplify the error handling at the call
site, either.

Cheers,

Dave.
-- 
Dave Chinner
david@xxxxxxxxxxxxx

_______________________________________________
xfs mailing list
xfs@xxxxxxxxxxx
http://oss.sgi.com/mailman/listinfo/xfs


[Index of Archives]     [Linux XFS Devel]     [Linux Filesystem Development]     [Filesystem Testing]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux