[PATCH 42/50] xfs_io: display rt group in verbose fsmap output

Darrick J. Wong
2024-12-07T00:15:55Z

From: Darrick J. Wong <djwong@kernel.org>

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 | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/io/fsmap.c b/io/fsmap.c
index bf1196390cf35d..545f619f5e1dc1 100644
--- a/io/fsmap.c
+++ b/io/fsmap.c
@@ -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);
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 {