]> www.infradead.org Git - users/hch/xfs.git/commitdiff
xfs: update sb field checks when metadir is turned on
authorDarrick J. Wong <djwong@kernel.org>
Mon, 23 Sep 2024 20:41:42 +0000 (13:41 -0700)
committerChristoph Hellwig <hch@lst.de>
Wed, 9 Oct 2024 13:55:44 +0000 (15:55 +0200)
When metadir is enabled, we want to check the two new rtgroups fields,
and we don't want to check the old inumbers that are now in the metadir.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/scrub/agheader.c

index e6df4bd97921127a803b39bd943195a50bffc809..0fc5bd7b378cae37e5072a8548be570aa9cb00f6 100644 (file)
@@ -147,13 +147,13 @@ xchk_superblock(
        if (xfs_has_metadir(sc->mp)) {
                if (sb->sb_metadirino != cpu_to_be64(mp->m_sb.sb_metadirino))
                        xchk_block_set_preen(sc, bp);
-       }
-
-       if (sb->sb_rbmino != cpu_to_be64(mp->m_sb.sb_rbmino))
-               xchk_block_set_preen(sc, bp);
+       } else {
+               if (sb->sb_rbmino != cpu_to_be64(mp->m_sb.sb_rbmino))
+                       xchk_block_set_preen(sc, bp);
 
-       if (sb->sb_rsumino != cpu_to_be64(mp->m_sb.sb_rsumino))
-               xchk_block_set_preen(sc, bp);
+               if (sb->sb_rsumino != cpu_to_be64(mp->m_sb.sb_rsumino))
+                       xchk_block_set_preen(sc, bp);
+       }
 
        if (sb->sb_rextsize != cpu_to_be32(mp->m_sb.sb_rextsize))
                xchk_block_set_corrupt(sc, bp);
@@ -229,11 +229,13 @@ xchk_superblock(
         * sb_icount, sb_ifree, sb_fdblocks, sb_frexents
         */
 
-       if (sb->sb_uquotino != cpu_to_be64(mp->m_sb.sb_uquotino))
-               xchk_block_set_preen(sc, bp);
+       if (!xfs_has_metadir(mp)) {
+               if (sb->sb_uquotino != cpu_to_be64(mp->m_sb.sb_uquotino))
+                       xchk_block_set_preen(sc, bp);
 
-       if (sb->sb_gquotino != cpu_to_be64(mp->m_sb.sb_gquotino))
-               xchk_block_set_preen(sc, bp);
+               if (sb->sb_gquotino != cpu_to_be64(mp->m_sb.sb_gquotino))
+                       xchk_block_set_preen(sc, bp);
+       }
 
        /*
         * Skip the quota flags since repair will force quotacheck.
@@ -349,8 +351,10 @@ xchk_superblock(
                if (sb->sb_spino_align != cpu_to_be32(mp->m_sb.sb_spino_align))
                        xchk_block_set_corrupt(sc, bp);
 
-               if (sb->sb_pquotino != cpu_to_be64(mp->m_sb.sb_pquotino))
-                       xchk_block_set_preen(sc, bp);
+               if (!xfs_has_metadir(mp)) {
+                       if (sb->sb_pquotino != cpu_to_be64(mp->m_sb.sb_pquotino))
+                               xchk_block_set_preen(sc, bp);
+               }
 
                /* Don't care about sb_lsn */
        }
@@ -361,6 +365,14 @@ xchk_superblock(
                        xchk_block_set_corrupt(sc, bp);
        }
 
+       if (xfs_has_metadir(mp)) {
+               if (sb->sb_rgcount != cpu_to_be32(mp->m_sb.sb_rgcount))
+                       xchk_block_set_corrupt(sc, bp);
+
+               if (sb->sb_rgextents != cpu_to_be32(mp->m_sb.sb_rgextents))
+                       xchk_block_set_corrupt(sc, bp);
+       }
+
        /* Everything else must be zero. */
        if (memchr_inv(sb + 1, 0,
                        BBTOB(bp->b_length) - sizeof(struct xfs_dsb)))