@@ -159,6 +159,11 @@ const struct xfrog_scrub_descr xfrog_scrubbers[XFS_SCRUB_TYPE_NR] = {
.descr = "metadata directory paths",
.group = XFROG_SCRUB_GROUP_METAPATH,
},
+ [XFS_SCRUB_TYPE_RGSUPER] = {
+ .name = "rgsuper",
+ .descr = "realtime group superblock",
+ .group = XFROG_SCRUB_GROUP_RTGROUP,
+ },
};
const struct xfrog_scrub_descr xfrog_metapaths[XFS_SCRUB_METAPATH_NR] = {
@@ -16,6 +16,7 @@ enum xfrog_scrub_group {
XFROG_SCRUB_GROUP_ISCAN, /* metadata requiring full inode scan */
XFROG_SCRUB_GROUP_SUMMARY, /* summary metadata */
XFROG_SCRUB_GROUP_METAPATH, /* metadata directory path */
+ XFROG_SCRUB_GROUP_RTGROUP, /* per-rtgroup metadata */
};
/* Catalog of scrub types and names, indexed by XFS_SCRUB_TYPE_* */
@@ -88,6 +88,15 @@ .SH DESCRIPTION
.BR sm_ino " and " sm_gen
must be zero.
+.PP
+.TP
+.B XFS_SCRUB_TYPE_RGSUPER
+Examine a given realtime allocation group's superblock.
+The realtime allocation group number must be given in
+.IR sm_agno "."
+.IR sm_ino " and " sm_gen
+must be zero.
+
.TP
.B XFS_SCRUB_TYPE_INODE
Examine a given inode record for obviously incorrect values and
@@ -546,6 +546,7 @@ repair_item_difficulty(
case XFS_SCRUB_TYPE_REFCNTBT:
case XFS_SCRUB_TYPE_RTBITMAP:
case XFS_SCRUB_TYPE_RTSUM:
+ case XFS_SCRUB_TYPE_RGSUPER:
ret |= REPAIR_DIFFICULTY_PRIMARY;
break;
}
@@ -66,6 +66,9 @@ format_metapath_descr(
(unsigned long long)vhead->svh_ino);
sc = &xfrog_metapaths[vhead->svh_ino];
+ if (sc->group == XFROG_SCRUB_GROUP_RTGROUP)
+ return snprintf(buf, buflen, _("rtgroup %u %s"),
+ vhead->svh_agno, _(sc->descr));
return snprintf(buf, buflen, "%s", _(sc->descr));
}
@@ -107,6 +110,9 @@ format_scrubv_descr(
return snprintf(buf, buflen, _("%s"), _(sc->descr));
case XFROG_SCRUB_GROUP_METAPATH:
return format_metapath_descr(buf, buflen, vhead);
+ case XFROG_SCRUB_GROUP_RTGROUP:
+ return snprintf(buf, buflen, _("rtgroup %u %s"),
+ vhead->svh_agno, _(sc->descr));
}
return -1;
}