]> www.infradead.org Git - users/hch/xfs.git/commitdiff
xfs: repair realtime group superblock
authorDarrick J. Wong <djwong@kernel.org>
Thu, 15 Aug 2024 18:48:27 +0000 (11:48 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Fri, 16 Aug 2024 21:54:18 +0000 (14:54 -0700)
Repair the realtime superblock if it has become out of date with the
primary superblock.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
fs/xfs/scrub/repair.h
fs/xfs/scrub/rgsuper.c
fs/xfs/scrub/scrub.c

index 4052185743910da837cf8263b2f25961988ad455..b649da1a93eb8c07e9116f4e65c8d208b4a44d22 100644 (file)
@@ -146,9 +146,11 @@ int xrep_metapath(struct xfs_scrub *sc);
 #ifdef CONFIG_XFS_RT
 int xrep_rtbitmap(struct xfs_scrub *sc);
 int xrep_rtsummary(struct xfs_scrub *sc);
+int xrep_rgsuperblock(struct xfs_scrub *sc);
 #else
 # define xrep_rtbitmap                 xrep_notsupported
 # define xrep_rtsummary                        xrep_notsupported
+# define xrep_rgsuperblock             xrep_notsupported
 #endif /* CONFIG_XFS_RT */
 
 #ifdef CONFIG_XFS_QUOTA
@@ -253,6 +255,7 @@ static inline int xrep_setup_symlink(struct xfs_scrub *sc, unsigned int *x)
 #define xrep_symlink                   xrep_notsupported
 #define xrep_dirtree                   xrep_notsupported
 #define xrep_metapath                  xrep_notsupported
+#define xrep_rgsuperblock              xrep_notsupported
 
 #endif /* CONFIG_XFS_ONLINE_REPAIR */
 
index bfba31a03adbcc38e79691a12133c9614e08b955..ad54a58cd9848606c7e8b946c6270061e2f90d02 100644 (file)
 #include "xfs_trans_resv.h"
 #include "xfs_mount.h"
 #include "xfs_rtgroup.h"
+#include "xfs_log_format.h"
+#include "xfs_trans.h"
+#include "xfs_sb.h"
 #include "scrub/scrub.h"
 #include "scrub/common.h"
+#include "scrub/repair.h"
 
 /* Set us up with a transaction and an empty context. */
 int
@@ -71,3 +75,15 @@ xchk_rgsuperblock(
        xchk_rgsuperblock_xref(sc);
        return 0;
 }
+
+#ifdef CONFIG_XFS_ONLINE_REPAIR
+int
+xrep_rgsuperblock(
+       struct xfs_scrub        *sc)
+{
+       ASSERT(sc->sr.rtg->rtg_rgno == 0);
+
+       xfs_log_sb(sc->tp);
+       return 0;
+}
+#endif /* CONFIG_XFS_ONLINE_REPAIR */
index fc8476c522746ee984962ef0ce0d27d06209edc2..c255882fc5e40b124ba0e8b33d3e4aa1352e6a9d 100644 (file)
@@ -456,7 +456,7 @@ static const struct xchk_meta_ops meta_scrub_ops[] = {
                .setup  = xchk_setup_rgsuperblock,
                .scrub  = xchk_rgsuperblock,
                .has    = xfs_has_rtsb,
-               .repair = xrep_notsupported,
+               .repair = xrep_rgsuperblock,
        },
 };