]> www.infradead.org Git - users/hch/xfsprogs.git/commitdiff
xfs_io: display rt group in verbose fsmap output
authorDarrick J. Wong <djwong@kernel.org>
Fri, 9 Dec 2022 19:09:27 +0000 (11:09 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 22 Nov 2023 23:03:35 +0000 (15:03 -0800)
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 7db51847e2b93e4dee40de34fde060d211f63634..cb70f86cb96d9ca829cfa7dc17cd8acb92736deb 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;
-       off64_t                 agoff, bperag;
+       off64_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,8 @@ dump_map_verbose(
        tot_w = MINTOT_WIDTH;
        bperag = (off64_t)fsgeo->agblocks *
                  (off64_t)fsgeo->blocksize;
+       bperrtg = (off64_t)fsgeo->rgblocks *
+                 (off64_t)fsgeo->blocksize;
        sunit = (fsgeo->sunit * fsgeo->blocksize);
        swidth = (fsgeo->swidth * fsgeo->blocksize);
 
@@ -243,6 +246,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 +325,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 +521,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 {