[PATCH 10/38] xfs_io: support the bulkstat metadata directory flag

Darrick J. Wong
2024-10-11T01:16:47Z

Support the new XFS_BULK_IREQ_METADIR flag for bulkstat commands.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
---
io/bulkstat.c | 16 +++++++++++++++-
man/man8/xfs_io.8 | 10 +++++++---
2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/io/bulkstat.c b/io/bulkstat.c
index 06023e1289e420..f312c6d55f47bc 100644
--- a/io/bulkstat.c
+++ b/io/bulkstat.c
@@ -70,6 +70,7 @@ bulkstat_help(void)
" -d Print debugging output.\n"
" -q Be quiet, no output.\n"
" -e <ino> Stop after this inode.\n"
+" -m Include metadata directories.\n"
" -n <nr> Ask for this many results at once.\n"
" -s <ino> Inode to start with.\n"
" -v <ver> Use this version of the ioctl (1 or 5).\n"));
@@ -107,11 +108,12 @@ bulkstat_f(
bool has_agno = false;
bool debug = false;
bool quiet = false;
+ bool metadir = false;
unsigned int i;
int c;
int ret;

- while ((c = getopt(argc, argv, "a:de:n:qs:v:")) != -1) {
+ while ((c = getopt(argc, argv, "a:de:mn:qs:v:")) != -1) {
switch (c) {
case 'a':
agno = cvt_u32(optarg, 10);
@@ -131,6 +133,9 @@ bulkstat_f(
return 1;
}
break;
+ case 'm':
+ metadir = true;
+ break;
case 'n':
batch_size = cvt_u32(optarg, 10);
if (errno) {
@@ -185,6 +190,8 @@ bulkstat_f(

if (has_agno)
xfrog_bulkstat_set_ag(breq, agno);
+ if (metadir)
+ breq->hdr.flags |= XFS_BULK_IREQ_METADIR;

set_xfd_flags(&xfd, ver);

@@ -253,6 +260,7 @@ bulkstat_single_f(
unsigned long ver = 0;
unsigned int i;
bool debug = false;
+ bool metadir = false;
int c;
int ret;

@@ -261,6 +269,9 @@ bulkstat_single_f(
case 'd':
debug = true;
break;
+ case 'm':
+ metadir = true;
+ break;
case 'v':
errno = 0;
ver = strtoull(optarg, NULL, 10);
@@ -313,6 +324,9 @@ bulkstat_single_f(
}
}

+ if (metadir)
+ flags |= XFS_BULK_IREQ_METADIR;
+
ret = -xfrog_bulkstat_single(&xfd, ino, flags, &bulkstat);
if (ret) {
xfrog_perror(ret, "xfrog_bulkstat_single");
diff --git a/man/man8/xfs_io.8 b/man/man8/xfs_io.8
index eb2201fca74380..fb7a026224fda7 100644
--- a/man/man8/xfs_io.8
+++ b/man/man8/xfs_io.8
@@ -1243,7 +1243,7 @@ .SH MEMORY MAPPED I/O COMMANDS

.SH FILESYSTEM COMMANDS
.TP
-.BI "bulkstat [ \-a " agno " ] [ \-d ] [ \-e " endino " ] [ \-n " batchsize " ] [ \-q ] [ \-s " startino " ] [ \-v " version" ]
+.BI "bulkstat [ \-a " agno " ] [ \-d ] [ \-e " endino " ] [ \-m ] [ \-n " batchsize " ] [ \-q ] [ \-s " startino " ] [ \-v " version" ]
Display raw stat information about a bunch of inodes in an XFS filesystem.
Options are as follows:
.RS 1.0i
@@ -1260,6 +1260,9 @@ .SH FILESYSTEM COMMANDS
Stop displaying records when this inode number is reached.
Defaults to stopping when the system call stops returning results.
.TP
+.BI \-m
+Include metadata directories in the output.
+.TP
.BI \-n " batchsize"
Retrieve at most this many records per call.
Defaults to 4,096.
@@ -1280,10 +1283,11 @@ .SH FILESYSTEM COMMANDS
.RE
.PD
.TP
-.BI "bulkstat_single [ \-d ] [ \-v " version " ] [ " inum... " | " special... " ]
+.BI "bulkstat_single [ \-d ] [ \-m ] [ \-v " version " ] [ " inum... " | " special... " ]
Display raw stat information about individual inodes in an XFS filesystem.
The
-.B \-d
+.BR \-d ,
+.BR \-m ,
and
.B \-v
options are the same as the