]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_io: support scrubbing rtgroup metadata
authorDarrick J. Wong <djwong@kernel.org>
Thu, 21 Nov 2024 00:24:39 +0000 (16:24 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 24 Dec 2024 02:01:34 +0000 (18:01 -0800)
Support scrubbing all rtgroup metadata with a scrubv call.

Signed-off-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
io/scrub.c
man/man8/xfs_io.8

index 45229a8ae810994aca7038267dc08f46ebcebf51..99c24d9550243c084e4b6763ef00a2db2bf70802 100644 (file)
@@ -165,6 +165,32 @@ parse_metapath(
        return true;
 }
 
+static bool
+parse_rtgroup(
+       int             argc,
+       char            **argv,
+       int             optind,
+       __u32           *rgno)
+{
+       char            *p;
+       unsigned long   control;
+
+       if (optind != argc - 1) {
+               fprintf(stderr, _("Must specify one rtgroup number.\n"));
+               return false;
+       }
+
+       control = strtoul(argv[optind], &p, 0);
+       if (*p != '\0') {
+               fprintf(stderr, _("Bad rtgroup number '%s'.\n"),
+                               argv[optind]);
+               return false;
+       }
+
+       *rgno = control;
+       return true;
+}
+
 static int
 parse_args(
        int                             argc,
@@ -230,6 +256,12 @@ parse_args(
                        return command_usage(cmdinfo);
                }
                break;
+       case XFROG_SCRUB_GROUP_RTGROUP:
+               if (!parse_rtgroup(argc, argv, optind, &meta->sm_agno)) {
+                       exitcode = 1;
+                       return command_usage(cmdinfo);
+               }
+               break;
        case XFROG_SCRUB_GROUP_FS:
        case XFROG_SCRUB_GROUP_NONE:
        case XFROG_SCRUB_GROUP_SUMMARY:
@@ -539,6 +571,8 @@ scrubv_f(
                group = XFROG_SCRUB_GROUP_ISCAN;
        else if (!strcmp(argv[optind], "summary"))
                group = XFROG_SCRUB_GROUP_SUMMARY;
+       else if (!strcmp(argv[optind], "rtgroup"))
+               group = XFROG_SCRUB_GROUP_RTGROUP;
        else {
                printf(_("Unknown group '%s'.\n"), argv[optind]);
                exitcode = 1;
@@ -576,6 +610,12 @@ scrubv_f(
                        return command_usage(&scrubv_cmd);
                }
                break;
+       case XFROG_SCRUB_GROUP_RTGROUP:
+               if (!parse_rtgroup(argc, argv, optind, &scrubv.head.svh_agno)) {
+                       exitcode = 1;
+                       return command_usage(&scrubv_cmd);
+               }
+               break;
        default:
                ASSERT(0);
                break;
index c73fee7c2780c6c3e43513db817a506004f12c14..6775b0a273e5aa57e3434ceed2a5cffcf2834a8b 100644 (file)
@@ -1425,11 +1425,12 @@ Currently supported versions are 1 and 5.
 .RE
 .PD
 .TP
-.BI "scrub " type " [ " agnumber " | " "ino" " " "gen" " | " metapath " ]"
+.BI "scrub " type " [ " agnumber " | " rgnumber " | " "ino" " " "gen" " | " metapath " ]"
 Scrub internal XFS filesystem metadata.  The
 .BI type
 parameter specifies which type of metadata to scrub.
 For AG metadata, one AG number must be specified.
+For realtime group metadata, one rtgroup number must be specified.
 For file metadata, the scrub is applied to the open file unless the
 inode number and generation number are specified.
 For metapath, the name of a file or a raw number must be specified.