]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
xfs_db: dump rt summary blocks
authorDarrick J. Wong <djwong@kernel.org>
Mon, 19 Sep 2022 21:14:54 +0000 (14:14 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 22 Nov 2023 23:03:35 +0000 (15:03 -0800)
Now that rtsummary blocks have a header, make it so that xfs_db can
analyze the structure.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
db/field.c
db/field.h
db/inode.c
db/rtgroup.c
db/rtgroup.h
db/type.c
db/type.h

index 7dee8c3735cc3e0b3e32fb04ddd7d078b61177b8..4a6a4cf51c3922515b46064ffcfcecc1ad63f5a4 100644 (file)
@@ -397,6 +397,11 @@ const ftattr_t     ftattrtab[] = {
          FTARG_LE, NULL, NULL },
        { FLDT_RGBITMAP, "rgbitmap", NULL, (char *)rgbitmap_flds, btblock_size,
          FTARG_SIZE, NULL, rgbitmap_flds },
+       { FLDT_SUMINFO, "suminfo", fp_num, "%u", SI(bitsz(xfs_suminfo_t)),
+         0, NULL, NULL },
+       { FLDT_RGSUMMARY, "rgsummary", NULL, (char *)rgsummary_flds,
+         btblock_size, FTARG_SIZE, NULL, rgsummary_flds },
+
        { FLDT_ZZZ, NULL }
 };
 
index ce7e7297afa94e96e18b911c5c8b5515ae8d72bb..e9c6142f28254eb1724126092abf5a023e438434 100644 (file)
@@ -194,6 +194,9 @@ typedef enum fldt   {
 
        FLDT_RTWORD,
        FLDT_RGBITMAP,
+       FLDT_SUMINFO,
+       FLDT_RGSUMMARY,
+
        FLDT_ZZZ                        /* mark last entry */
 } fldt_t;
 
index 5510b2cb6631b4f7ad29dff8914ee72d9f798283..16033c5ab793abddd19cf5a4fce81a2e57d61f9e 100644 (file)
@@ -646,8 +646,11 @@ inode_next_type(void)
                        if (xfs_has_rtgroups(mp))
                                return TYP_RGBITMAP;
                        return TYP_RTBITMAP;
-               } else if (iocur_top->ino == mp->m_sb.sb_rsumino)
+               } else if (iocur_top->ino == mp->m_sb.sb_rsumino) {
+                       if (xfs_has_rtgroups(mp))
+                               return TYP_RGSUMMARY;
                        return TYP_RTSUMMARY;
+               }
                else if (iocur_top->ino == mp->m_sb.sb_uquotino ||
                         iocur_top->ino == mp->m_sb.sb_gquotino ||
                         iocur_top->ino == mp->m_sb.sb_pquotino)
index 41d6dbf7ccf9180b9fcdc52dc07aa00c10401c31..558f951c1132c3040f8a94384a6e2b027ca9ad84 100644 (file)
@@ -147,3 +147,23 @@ const field_t      rgbitmap_hfld[] = {
        { "", FLDT_RGBITMAP, OI(0), C1, 0, TYP_NONE },
        { NULL }
 };
+
+#define        OFF(f)  bitize(offsetof(struct xfs_rtbuf_blkinfo, rt_ ## f))
+const field_t  rgsummary_flds[] = {
+       { "magicnum", FLDT_UINT32X, OI(OFF(magic)), C1, 0, TYP_NONE },
+       { "crc", FLDT_CRC, OI(OFF(crc)), C1, 0, TYP_NONE },
+       { "owner", FLDT_INO, OI(OFF(owner)), C1, 0, TYP_NONE },
+       { "bno", FLDT_DFSBNO, OI(OFF(blkno)), C1, 0, TYP_BMAPBTD },
+       { "lsn", FLDT_UINT64X, OI(OFF(lsn)), C1, 0, TYP_NONE },
+       { "uuid", FLDT_UUID, OI(OFF(uuid)), C1, 0, TYP_NONE },
+       /* the suminfo array is after the actual structure */
+       { "suminfo", FLDT_SUMINFO, OI(bitize(sizeof(struct xfs_rtbuf_blkinfo))),
+         rtwords_count, FLD_ARRAY | FLD_COUNT, TYP_DATA },
+       { NULL }
+};
+#undef OFF
+
+const field_t  rgsummary_hfld[] = {
+       { "", FLDT_RGSUMMARY, OI(0), C1, 0, TYP_NONE },
+       { NULL }
+};
index 56f19c42e0745510a2353c50762e9595a8eb64cd..2117c4643a653bf240c3065b645cb1086bbed431 100644 (file)
@@ -12,6 +12,9 @@ extern const struct field     rtsb_hfld[];
 extern const struct field      rgbitmap_flds[];
 extern const struct field      rgbitmap_hfld[];
 
+extern const struct field      rgsummary_flds[];
+extern const struct field      rgsummary_hfld[];
+
 extern void    rtsb_init(void);
 extern int     rtsb_size(void *obj, int startoff, int idx);
 
index 65e7b24146f17072469f3bc2b398bc05a288a5b7..2091b4ac8b139b4daa3548d161fbdf977b4da12a 100644 (file)
--- a/db/type.c
+++ b/db/type.c
@@ -68,6 +68,7 @@ static const typ_t    __typtab[] = {
        { TYP_FINOBT, "finobt", handle_struct, finobt_hfld, NULL,
                TYP_F_NO_CRC_OFF },
        { TYP_RGBITMAP, NULL },
+       { TYP_RGSUMMARY, NULL },
        { TYP_NONE, NULL }
 };
 
@@ -116,6 +117,8 @@ static const typ_t  __typtab_crc[] = {
                &xfs_finobt_buf_ops, XFS_BTREE_SBLOCK_CRC_OFF },
        { TYP_RGBITMAP, "rgbitmap", handle_struct, rgbitmap_hfld,
                &xfs_rtbitmap_buf_ops, XFS_RTBUF_CRC_OFF },
+       { TYP_RGSUMMARY, "rgsummary", handle_struct, rgsummary_hfld,
+               &xfs_rtsummary_buf_ops, XFS_RTBUF_CRC_OFF },
        { TYP_NONE, NULL }
 };
 
@@ -164,6 +167,8 @@ static const typ_t  __typtab_spcrc[] = {
                &xfs_finobt_buf_ops, XFS_BTREE_SBLOCK_CRC_OFF },
        { TYP_RGBITMAP, "rgbitmap", handle_struct, rgbitmap_hfld,
                &xfs_rtbitmap_buf_ops, XFS_RTBUF_CRC_OFF },
+       { TYP_RGSUMMARY, "rgsummary", handle_struct, rgsummary_hfld,
+               &xfs_rtsummary_buf_ops, XFS_RTBUF_CRC_OFF },
        { TYP_NONE, NULL }
 };
 
index e2148c6351d1411c8aa4bb4498e9951de231c940..e7f0ecc17680bf24d9fc1c04506063f690b6669b 100644 (file)
--- a/db/type.h
+++ b/db/type.h
@@ -36,6 +36,7 @@ typedef enum typnm
        TYP_TEXT,
        TYP_FINOBT,
        TYP_RGBITMAP,
+       TYP_RGSUMMARY,
        TYP_NONE
 } typnm_t;