]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_db: support the realtime refcountbt
authorDarrick J. Wong <djwong@kernel.org>
Mon, 24 Feb 2025 18:22:04 +0000 (10:22 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 25 Feb 2025 17:16:02 +0000 (09:16 -0800)
Wire up various parts of xfs_db for realtime refcount support so that we
can dump the rt refcount btree contents.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
db/btblock.c
db/btdump.c
db/btheight.c
libxfs/libxfs_api_defs.h
man/man8/xfs_db.8

index 40913a094375aa3b59232b17728e57cf40e8d840..e9e5d2f86b9f01c5ae3bc2ee0200b28bebfdc31d 100644 (file)
@@ -159,6 +159,9 @@ block_to_bt(
        case TYP_REFCBT:
                magic = crc ? XFS_REFC_CRC_MAGIC : 0;
                break;
+       case TYP_RTREFCBT:
+               magic = crc ? XFS_RTREFC_CRC_MAGIC : 0;
+               break;
        default:
                ASSERT(0);
        }
index 55301d25de10cd4c56ce95a9504dd75a5f40baf2..29ff28f1639977ef66ae3eba145b8df744d732d0 100644 (file)
@@ -456,6 +456,7 @@ dump_btree_inode(
        char                    *prefix;
        struct xfs_dinode       *dip = iocur_top->data;
        struct xfs_rtrmap_root  *rtrmap;
+       struct xfs_rtrefcount_root *rtrefc;
        int                     level;
        int                     numrecs;
        int                     ret;
@@ -467,6 +468,12 @@ dump_btree_inode(
                level = be16_to_cpu(rtrmap->bb_level);
                numrecs = be16_to_cpu(rtrmap->bb_numrecs);
                break;
+       case XFS_METAFILE_RTREFCOUNT:
+               prefix = "u3.rtrefcbt";
+               rtrefc = (struct xfs_rtrefcount_root *)XFS_DFORK_DPTR(dip);
+               level = be16_to_cpu(rtrefc->bb_level);
+               numrecs = be16_to_cpu(rtrefc->bb_numrecs);
+               break;
        default:
                dbprintf("Unknown metadata inode btree type %u\n",
                                be16_to_cpu(dip->di_metatype));
@@ -549,6 +556,7 @@ btdump_f(
        case TYP_BMAPBTA:
        case TYP_BMAPBTD:
        case TYP_RTRMAPBT:
+       case TYP_RTREFCBT:
                return dump_btree_long(iflag);
        case TYP_INODE:
                if (is_btree_inode())
index 31dff1c924a2e00765c11bf61b8ed119c67e1243..14081c969a922c59a8e4e4d73f304d0498013d67 100644 (file)
@@ -58,6 +58,11 @@ struct btmap {
                .maxlevels      = libxfs_rtrmapbt_maxlevels_ondisk,
                .maxrecs        = libxfs_rtrmapbt_maxrecs,
        },
+       {
+               .tag            = "rtrefcountbt",
+               .maxlevels      = libxfs_rtrefcountbt_maxlevels_ondisk,
+               .maxrecs        = libxfs_rtrefcountbt_maxrecs,
+       },
 };
 
 static void
index 167df04df8fb1b2659e9e1ef7aeebcf8f8c879ca..87a598f346f86a51ef3002e57ac8d9e4d3fe97d7 100644 (file)
 #define xfs_rtgroup_put                        libxfs_rtgroup_put
 
 #define xfs_rtrefcountbt_droot_maxrecs libxfs_rtrefcountbt_droot_maxrecs
+#define xfs_rtrefcountbt_maxlevels_ondisk      libxfs_rtrefcountbt_maxlevels_ondisk
 #define xfs_rtrefcountbt_maxrecs       libxfs_rtrefcountbt_maxrecs
 
 #define xfs_rtrmapbt_calc_reserves     libxfs_rtrmapbt_calc_reserves
index 8326bddcef837847b32ac38d6f80d13d3a3ae340..08f38f37ca01cc1c013519eea3f70f829bc98a29 100644 (file)
@@ -536,6 +536,7 @@ The supported btree types are:
 .IR bmapbt ,
 .IR refcountbt ,
 .IR rmapbt ,
+.IR rtrefcountbt ,
 and
 .IR rtrmapbt .
 The magic value