]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
xfs_db: support the realtime refcountbt
authorDarrick J. Wong <djwong@kernel.org>
Thu, 15 Aug 2024 18:58:29 +0000 (11:58 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Fri, 16 Aug 2024 21:57:44 +0000 (14:57 -0700)
Wire up various parts of xfs_db for realtime refcount support.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
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 9c528e5a11a6954ff75c6095b28051356b0d311e..31f32a8f7a5f6ef75e3b2a22dd205a45606ce46e 100644 (file)
@@ -447,7 +447,8 @@ is_btree_inode(void)
        struct xfs_dinode       *dip;
 
        dip = iocur_top->data;
-       return dip->di_format == XFS_DINODE_FMT_RMAP;
+       return dip->di_format == XFS_DINODE_FMT_RMAP ||
+              dip->di_format == XFS_DINODE_FMT_REFCOUNT;
 }
 
 static int
@@ -457,6 +458,7 @@ dump_btree_inode(
        char                    *prefix;
        struct xfs_dinode       *dip;
        struct xfs_rtrmap_root  *rtrmap;
+       struct xfs_rtrefcount_root *rtrefc;
        int                     level;
        int                     numrecs;
        int                     ret;
@@ -469,6 +471,12 @@ dump_btree_inode(
                level = be16_to_cpu(rtrmap->bb_level);
                numrecs = be16_to_cpu(rtrmap->bb_numrecs);
                break;
+       case XFS_DINODE_FMT_REFCOUNT:
+               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 type %u\n", dip->di_format);
                return 0;
@@ -550,6 +558,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 25ce3400334270f5f16bffd927bfdc99fa706c11..9dd21ddae9a6217dc128849fd9ece1e5158a4dd0 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 0bb39e278532a039fa762a7af9a9de539f80aa56..8b9d7954eb1a8fd83ba9ae72361c4d11f7b31e94 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 d9204f2086a034f29f951506651124f024c15e51..5a27033a58e056abac1eb36f9a7a5025c47a1ab2 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