Re: [PATCH] xfs_db: identify attr dabtree field types correctly

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

 



On Thu, Jun 29, 2017 at 04:19:59PM -0500, Eric Sandeen wrote:
> On 6/29/17 2:53 PM, Darrick J. Wong wrote:
> > For whatever reason, the v5 xattr dabtree header fields are mapped to
> > the directory dabtree header fields, which means that the types are
> > wrong and hence we cannot use the 'addr' command to step through the
> > tree.  Since the v4 attr dabtree does this correctly, simply port the v5
> > fields to the attr code too.
> > 
> > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
> > ---
> >  db/attr.c  |   24 ++++++++++++++++++++++--
> >  db/attr.h  |    2 ++
> >  db/field.c |    6 ++++--
> >  db/field.h |    1 +
> >  4 files changed, 29 insertions(+), 4 deletions(-)
> > 
> > diff --git a/db/attr.c b/db/attr.c
> > index 6f56953..2b7b164 100644
> > --- a/db/attr.c
> > +++ b/db/attr.c
> > @@ -499,7 +499,7 @@ const field_t	attr3_hfld[] = {
> >  const field_t	attr3_flds[] = {
> >  	{ "hdr", FLDT_ATTR3_LEAF_HDR, OI(L3OFF(hdr)), attr3_leaf_hdr_count,
> >  	  FLD_COUNT, TYP_NONE },
> > -	{ "hdr", FLDT_DA3_NODE_HDR, OI(N3OFF(hdr)), attr3_node_hdr_count,
> > +	{ "hdr", FLDT_ATTR3_NODE_HDR, OI(N3OFF(hdr)), attr3_node_hdr_count,
> >  	  FLD_COUNT, TYP_NONE },
> >  	{ "entries", FLDT_ATTR_LEAF_ENTRY, OI(L3OFF(entries)),
> >  	  attr3_leaf_entries_count, FLD_ARRAY|FLD_COUNT, TYP_NONE },
> > @@ -512,7 +512,7 @@ const field_t	attr3_flds[] = {
> >  
> >  #define	LH3OFF(f)	bitize(offsetof(struct xfs_attr3_leaf_hdr, f))
> >  const field_t	attr3_leaf_hdr_flds[] = {
> > -	{ "info", FLDT_DA3_BLKINFO, OI(LH3OFF(info)), C1, 0, TYP_NONE },
> > +	{ "info", FLDT_ATTR3_BLKINFO, OI(LH3OFF(info)), C1, 0, TYP_NONE },
> >  	{ "count", FLDT_UINT16D, OI(LH3OFF(count)), C1, 0, TYP_NONE },
> >  	{ "usedbytes", FLDT_UINT16D, OI(LH3OFF(usedbytes)), C1, 0, TYP_NONE },
> >  	{ "firstused", FLDT_UINT16D, OI(LH3OFF(firstused)), C1, 0, TYP_NONE },
> > @@ -523,6 +523,26 @@ const field_t	attr3_leaf_hdr_flds[] = {
> >  	{ NULL }
> >  };
> >  
> > +#define	DB3OFF(f)	bitize(offsetof(struct xfs_da3_blkinfo, f))
> 
> Doesn't "D" indicate dir?  so:  "B3OFF" (matching the existing "BOFF"
> for attr_blkinfo_flds I think?)

Yeah.

> > +const field_t	attr3_blkinfo_flds[] = {
> > +	{ "hdr", FLDT_ATTR_BLKINFO, OI(DB3OFF(hdr)), C1, 0, TYP_NONE },
> > +	{ "crc", FLDT_CRC, OI(DB3OFF(crc)), C1, 0, TYP_NONE },
> > +	{ "bno", FLDT_DFSBNO, OI(DB3OFF(blkno)), C1, 0, TYP_BMAPBTD },
> > +	{ "lsn", FLDT_UINT64X, OI(DB3OFF(lsn)), C1, 0, TYP_NONE },
> > +	{ "uuid", FLDT_UUID, OI(DB3OFF(uuid)), C1, 0, TYP_NONE },
> > +	{ "owner", FLDT_INO, OI(DB3OFF(owner)), C1, 0, TYP_NONE },
> > +	{ NULL }
> > +};
> > +
> > +#define	H3OFF(f)	bitize(offsetof(struct xfs_da3_node_hdr, f))
> > +const field_t	attr3_node_hdr_flds[] = {
> > +	{ "info", FLDT_ATTR3_BLKINFO, OI(H3OFF(info)), C1, 0, TYP_NONE },
> > +	{ "count", FLDT_UINT16D, OI(H3OFF(__count)), C1, 0, TYP_NONE },
> > +	{ "level", FLDT_UINT16D, OI(H3OFF(__level)), C1, 0, TYP_NONE },
> > +	{ "pad", FLDT_UINT32D, OI(H3OFF(__pad32)), C1, 0, TYP_NONE },
> > +	{ NULL }
> > +};
> > +
> >  /*
> >   * Special read verifier for attribute buffers. Detect the magic number
> >   * appropriately and set the correct verifier and call it.
> > diff --git a/db/attr.h b/db/attr.h
> > index bc3431f..21848c1 100644
> > --- a/db/attr.h
> > +++ b/db/attr.h
> > @@ -30,6 +30,8 @@ extern const field_t	attr3_flds[];
> >  extern const field_t	attr3_hfld[];
> >  extern const field_t	attr3_leaf_hdr_flds[];
> >  extern const field_t	attr3_node_hdr_flds[];
> > +extern const field_t	attr3_blkinfo_flds[];
> > +extern const field_t	attr3_node_hdr_flds[];
> >  
> >  extern int	attr_leaf_name_size(void *obj, int startoff, int idx);
> >  extern int	attr_size(void *obj, int startoff, int idx);
> > diff --git a/db/field.c b/db/field.c
> > index 2a2197a..d0c8e04 100644
> > --- a/db/field.c
> > +++ b/db/field.c
> > @@ -91,12 +91,14 @@ const ftattr_t	ftattrtab[] = {
> >  /* attr3 specific fields */
> >  	{ FLDT_ATTR3, "attr3", NULL, (char *)attr3_flds, attr_size, FTARG_SIZE,
> >  	  NULL, attr3_flds },
> > +	{ FLDT_ATTR3_BLKINFO, "attr3_blkinfo", NULL, (char *)attr3_blkinfo_flds,
> > +	  SI(bitsz(struct xfs_da_blkinfo)), 0, NULL, attr3_blkinfo_flds },
> 
> SI(bitsz(struct xfs_da3_blkinfo)) I think?

Yes.  Thanks for catching these... it's strange that btdump still worked
despite the incorrect size.  Will resend.

--D

> 
> >  	{ FLDT_ATTR3_LEAF_HDR, "attr3_leaf_hdr", NULL,
> >  	  (char *)attr3_leaf_hdr_flds, SI(bitsz(struct xfs_attr3_leaf_hdr)),
> >  	  0, NULL, attr3_leaf_hdr_flds },
> >  	{ FLDT_ATTR3_NODE_HDR, "attr3_node_hdr", NULL,
> > -	  (char *)da3_node_hdr_flds, SI(bitsz(struct xfs_da3_node_hdr)),
> > -	  0, NULL, da3_node_hdr_flds },
> > +	  (char *)attr3_node_hdr_flds, SI(bitsz(struct xfs_da3_node_hdr)),
> > +	  0, NULL, attr3_node_hdr_flds },
> >  
> >  	{ FLDT_BMAPBTA, "bmapbta", NULL, (char *)bmapbta_flds, btblock_size,
> >  	  FTARG_SIZE, NULL, bmapbta_flds },
> > diff --git a/db/field.h b/db/field.h
> > index 53616f1..d1a7095 100644
> > --- a/db/field.h
> > +++ b/db/field.h
> > @@ -44,6 +44,7 @@ typedef enum fldt	{
> >  
> >  	/* attr 3 specific fields */
> >  	FLDT_ATTR3,
> > +	FLDT_ATTR3_BLKINFO,
> >  	FLDT_ATTR3_LEAF_HDR,
> >  	FLDT_ATTR3_NODE_HDR,
> >  
> > --
> > 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