[PATCH v2 05/10] xfs: fix error handling in xfs_bulkstat

Dave Chinner david at fromorbit.com
Sun Apr 27 16:26:44 CDT 2014


On Thu, Apr 24, 2014 at 11:48:15PM -0700, Christoph Hellwig wrote:
> > Moreover, this fix also get rid of the redundant user buffer count
> > pre-checkups as it has already been validated in upper callers.
> 
> > -	if (!ubcountp || *ubcountp <= 0) {
> > -		return EINVAL;
> > -	}
> 
> Probably better to have this as a separate patch.
> 
> > -			/*
> > -			 * Loop as long as we're unable to read the
> > -			 * inode btree.
> > -			 */
> > -			while (error) {
> > -				agino += XFS_INODES_PER_CHUNK;
> > -				if (XFS_AGINO_TO_AGBNO(mp, agino) >=
> > -						be32_to_cpu(agi->agi_length))
> > -					break;
> > -				error = xfs_inobt_lookup(cur, agino,
> > -							 XFS_LOOKUP_GE, &tmp);
> > -				cond_resched();
> > -			}
> 
> This code goes back to 1995, but I still can't see how it would make
> sense.  I think we should get rid of this, but I'd also love to have
> Dave and Eric double check it as well.

I can't see it makes much sense, except for handling IO errors
that occur during something like a path failover where a retry would
then succeed. However, I think that we'd do better for userspace to
handle this problem - a short bulkstat followed by userspace retry
rather than a potential endless loop in the kernel is a much better
way to handle the problem...

Cheers,

Dave.
-- 
Dave Chinner
david at fromorbit.com



More information about the xfs mailing list