From: "Darrick J. Wong" <darrick.wong@oracle.com>
To: Eric Sandeen <sandeen@sandeen.net>
Cc: Eric Sandeen <sandeen@redhat.com>, xfs <linux-xfs@vger.kernel.org>
Subject: Re: [PATCH] xfs_db: identify attr dabtree field types correctly
Date: Thu, 29 Jun 2017 16:58:13 -0700 [thread overview]
Message-ID: <20170629235813.GA5877@birch.djwong.org> (raw)
In-Reply-To: <ec0d83a4-d98c-4739-3b20-eaeec7e21512@sandeen.net>
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@oracle.com>
> > ---
> > 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@vger.kernel.org
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> >
prev parent reply other threads:[~2017-06-29 23:58 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-29 19:53 [PATCH] xfs_db: identify attr dabtree field types correctly Darrick J. Wong
2017-06-29 21:19 ` Eric Sandeen
2017-06-29 23:58 ` Darrick J. Wong [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170629235813.GA5877@birch.djwong.org \
--to=darrick.wong@oracle.com \
--cc=linux-xfs@vger.kernel.org \
--cc=sandeen@redhat.com \
--cc=sandeen@sandeen.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).