From: Darrick J. Wong <djwong@xxxxxxxxxx> When the metadata directory feature is enabled, mask the superblock fields (rt, quota inodes) that got migrated to the directory tree. Similarly, hide the 'metadirino' field when the feature is disabled. Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> --- db/sb.c | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/db/sb.c b/db/sb.c index 002736b02b7..2ad032cc81a 100644 --- a/db/sb.c +++ b/db/sb.c @@ -50,6 +50,30 @@ sb_init(void) add_command(&version_cmd); } +/* + * Counts superblock fields that only exist when the metadata directory feature + * is enabled. + */ +static int +metadirino_count( + void *obj, + int startoff) +{ + return xfs_has_metadir(mp) ? 1 : 0; +} + +/* + * Counts superblock fields that only existed before the metadata directory + * feature came along. + */ +static int +rootino_count( + void *obj, + int startoff) +{ + return xfs_has_metadir(mp) ? 0 : 1; +} + #define OFF(f) bitize(offsetof(struct xfs_dsb, sb_ ## f)) #define SZC(f) szcount(struct xfs_dsb, sb_ ## f) const field_t sb_flds[] = { @@ -61,8 +85,12 @@ const field_t sb_flds[] = { { "uuid", FLDT_UUID, OI(OFF(uuid)), C1, 0, TYP_NONE }, { "logstart", FLDT_DFSBNO, OI(OFF(logstart)), C1, 0, TYP_LOG }, { "rootino", FLDT_INO, OI(OFF(rootino)), C1, 0, TYP_INODE }, - { "rbmino", FLDT_INO, OI(OFF(rbmino)), C1, 0, TYP_INODE }, - { "rsumino", FLDT_INO, OI(OFF(rsumino)), C1, 0, TYP_INODE }, + { "metadirino", FLDT_INO, OI(OFF(rbmino)), metadirino_count, + FLD_COUNT, TYP_INODE }, + { "rbmino", FLDT_INO, OI(OFF(rbmino)), rootino_count, FLD_COUNT, + TYP_INODE }, + { "rsumino", FLDT_INO, OI(OFF(rsumino)), rootino_count, FLD_COUNT, + TYP_INODE }, { "rextsize", FLDT_AGBLOCK, OI(OFF(rextsize)), C1, 0, TYP_NONE }, { "agblocks", FLDT_AGBLOCK, OI(OFF(agblocks)), C1, 0, TYP_NONE }, { "agcount", FLDT_AGNUMBER, OI(OFF(agcount)), C1, 0, TYP_NONE }, @@ -85,8 +113,10 @@ const field_t sb_flds[] = { { "ifree", FLDT_UINT64D, OI(OFF(ifree)), C1, 0, TYP_NONE }, { "fdblocks", FLDT_UINT64D, OI(OFF(fdblocks)), C1, 0, TYP_NONE }, { "frextents", FLDT_UINT64D, OI(OFF(frextents)), C1, 0, TYP_NONE }, - { "uquotino", FLDT_INO, OI(OFF(uquotino)), C1, 0, TYP_INODE }, - { "gquotino", FLDT_INO, OI(OFF(gquotino)), C1, 0, TYP_INODE }, + { "uquotino", FLDT_INO, OI(OFF(uquotino)), rootino_count, FLD_COUNT, + TYP_INODE }, + { "gquotino", FLDT_INO, OI(OFF(gquotino)), rootino_count, FLD_COUNT, + TYP_INODE }, { "qflags", FLDT_UINT16X, OI(OFF(qflags)), C1, 0, TYP_NONE }, { "flags", FLDT_UINT8X, OI(OFF(flags)), C1, 0, TYP_NONE }, { "shared_vn", FLDT_UINT8D, OI(OFF(shared_vn)), C1, 0, TYP_NONE }, @@ -110,7 +140,8 @@ const field_t sb_flds[] = { C1, 0, TYP_NONE }, { "crc", FLDT_CRC, OI(OFF(crc)), C1, 0, TYP_NONE }, { "spino_align", FLDT_EXTLEN, OI(OFF(spino_align)), C1, 0, TYP_NONE }, - { "pquotino", FLDT_INO, OI(OFF(pquotino)), C1, 0, TYP_INODE }, + { "pquotino", FLDT_INO, OI(OFF(pquotino)), rootino_count, FLD_COUNT, + TYP_INODE }, { "lsn", FLDT_UINT64X, OI(OFF(lsn)), C1, 0, TYP_NONE }, { "meta_uuid", FLDT_UUID, OI(OFF(meta_uuid)), C1, 0, TYP_NONE }, { NULL }