]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
xfs_io: display rt group in verbose fsmap output
authorDarrick J. Wong <djwong@kernel.org>
Wed, 3 Jul 2024 21:22:10 +0000 (14:22 -0700)
committerChristoph Hellwig <hch@lst.de>
Tue, 6 Aug 2024 12:53:50 +0000 (05:53 -0700)
Display the rt group number in the fsmap output, just like we do for
regular data files.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
io/fsmap.c

index bf1196390cf35d066b5ca4df3aecf4ff491915b1..a577f698dacb1e9c99d24f298abfdd3b9ca912b6 100644 (file)
@@ -14,6 +14,7 @@
 
 static cmdinfo_t       fsmap_cmd;
 static dev_t           xfs_data_dev;
+static dev_t           xfs_rt_dev;
 
 static void
 fsmap_help(void)
@@ -170,7 +171,7 @@ dump_map_verbose(
        unsigned long long      i;
        struct fsmap            *p;
        int                     agno;
-       off_t                   agoff, bperag;
+       off_t                   agoff, bperag, bperrtg;
        int                     foff_w, boff_w, aoff_w, tot_w, agno_w, own_w;
        int                     nr_w, dev_w;
        char                    rbuf[40], bbuf[40], abuf[40], obuf[40];
@@ -185,6 +186,7 @@ dump_map_verbose(
        tot_w = MINTOT_WIDTH;
        bperag = (off_t)fsgeo->agblocks *
                  (off_t)fsgeo->blocksize;
+       bperrtg = bytes_per_rtgroup(fsgeo) / BBSIZE;
        sunit = (fsgeo->sunit * fsgeo->blocksize);
        swidth = (fsgeo->swidth * fsgeo->blocksize);
 
@@ -243,6 +245,13 @@ dump_map_verbose(
                                "(%lld..%lld)",
                                (long long)BTOBBT(agoff),
                                (long long)BTOBBT(agoff + p->fmr_length - 1));
+               } else if (p->fmr_device == xfs_rt_dev && fsgeo->rgcount > 0) {
+                       agno = p->fmr_physical / bperrtg;
+                       agoff = p->fmr_physical - (agno * bperrtg);
+                       snprintf(abuf, sizeof(abuf),
+                               "(%lld..%lld)",
+                               (long long)BTOBBT(agoff),
+                               (long long)BTOBBT(agoff + p->fmr_length - 1));
                } else
                        abuf[0] = 0;
                aoff_w = max(aoff_w, strlen(abuf));
@@ -315,6 +324,16 @@ dump_map_verbose(
                        snprintf(gbuf, sizeof(gbuf),
                                "%lld",
                                (long long)agno);
+               } else if (p->fmr_device == xfs_rt_dev && fsgeo->rgcount > 0) {
+                       agno = p->fmr_physical / bperrtg;
+                       agoff = p->fmr_physical - (agno * bperrtg);
+                       snprintf(abuf, sizeof(abuf),
+                               "(%lld..%lld)",
+                               (long long)BTOBBT(agoff),
+                               (long long)BTOBBT(agoff + p->fmr_length - 1));
+                       snprintf(gbuf, sizeof(gbuf),
+                               "%lld",
+                               (long long)agno);
                } else {
                        abuf[0] = 0;
                        gbuf[0] = 0;
@@ -501,6 +520,7 @@ fsmap_f(
        }
        fs = fs_table_lookup(file->name, FS_MOUNT_POINT);
        xfs_data_dev = fs ? fs->fs_datadev : 0;
+       xfs_rt_dev = fs ? fs->fs_rtdev : 0;
 
        head->fmh_count = map_size;
        do {