]> www.infradead.org Git - users/hch/misc.git/commitdiff
xfs: repair realtime group superblock
authorDarrick J. Wong <djwong@kernel.org>
Wed, 29 May 2024 04:11:23 +0000 (21:11 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 24 Jul 2024 05:33:39 +0000 (22:33 -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 90f9cb3b5ad8ba92d459fea85a1fdc51438e275d..2022bddc26440acf383186b36aa6dd5e99ec537d 100644 (file)
@@ -139,9 +139,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
@@ -246,6 +248,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 187155aa456b548ec41dc6f3be5cf6255120f1c1..429aeefde7e9b10ac60b458496ab91325245018f 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
@@ -69,3 +73,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 f341603278c61e381b8bcbb8c3190d7340318f8a..f3b3d1dae1ddf03277be02fd6640bef1199c0a2f 100644 (file)
@@ -458,7 +458,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,
        },
 };