Re: [PATCH 02/30] xfs: create block pointer check functions

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

 



On Thu, Oct 12, 2017 at 04:48:56PM +1100, Dave Chinner wrote:
> On Thu, Oct 12, 2017 at 04:28:52PM +1100, Dave Chinner wrote:
> > On Wed, Oct 11, 2017 at 06:40:55PM -0700, Darrick J. Wong wrote:
> > > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
> > > 
> > > Create some helper functions to check that a block pointer points
> > > within the filesystem (or AG) and doesn't point at static metadata.
> > > We will use this for scrub.
> > > 
> > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
> > 
> > Look fine
> 
> now that I think about it and seen a bit more code....
> 
> > 
> > Reviewed-by: Dave Chinner <dchinner@xxxxxxxxxx>
> > 
> > > ---
> > >  fs/xfs/libxfs/xfs_alloc.c    |   49 ++++++++++++++++++++++++++++++++++++++++++
> > >  fs/xfs/libxfs/xfs_alloc.h    |    4 +++
> > >  fs/xfs/libxfs/xfs_rtbitmap.c |   12 ++++++++++
> > >  fs/xfs/xfs_rtalloc.h         |    2 ++
> > >  4 files changed, 67 insertions(+)
> > > 
> > > 
> > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c
> > > index 744dcae..bd3a943 100644
> > > --- a/fs/xfs/libxfs/xfs_alloc.c
> > > +++ b/fs/xfs/libxfs/xfs_alloc.c
> > > @@ -2923,3 +2923,52 @@ xfs_alloc_query_all(
> > >  	query.fn = fn;
> > >  	return xfs_btree_query_all(cur, xfs_alloc_query_range_helper, &query);
> > >  }
> > > +
> > > +/* Find the size of the AG, in blocks. */
> > > +xfs_agblock_t
> > > +xfs_ag_block_count(
> > > +	struct xfs_mount	*mp,
> > > +	xfs_agnumber_t		agno)
> > > +{
> > > +	ASSERT(agno < mp->m_sb.sb_agcount);
> > > +
> > > +	if (agno < mp->m_sb.sb_agcount - 1)
> > > +		return mp->m_sb.sb_agblocks;
> > > +	return mp->m_sb.sb_dblocks - (agno * mp->m_sb.sb_agblocks);
> > > +}
> > > +
> > > +/*
> > > + * Verify that an AG block number pointer neither points outside the AG
> > > + * nor points at static metadata.
> > > + */
> > > +bool
> > > +xfs_verify_agbno_ptr(
> 
> You can probably drop the "_ptr" prefix from these because I don't
> think we every try to check/validate the agbno/fsbno of the static
> metadata....
> 
> Some of the code just reads a bit weird with the "_ptr" suffix
> in it...

I wrangled with the name for a while too -- a generic block number could
refer to any part of the AG, whereas a block number in a metadata
structure is a pointer and should never point to static metadata, hence
the _ptr suffix.  On the other hand, some of the block pointers can be
NULL{FS,AG}BLOCK and others can't, and we don't check that here so it's
not quite a pointer check either.

Meh.

xfs_verify_agbno() it is.  Anyone reading the comments will figure out
why xfs_verify_agbno(mp, agno, XFS_AGFL_BLOCK(mp)) == false.

> Still consider it reviewed....

Ok.

--D

> Cheers,
> 
> Dave.
> -- 
> Dave Chinner
> david@xxxxxxxxxxxxx
> --
> To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-xfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux