xfs: hoist inode record alignment checks from scrub
authorDarrick J. Wong <djwong@kernel.org>
Wed, 12 Apr 2023 02:00:06 +0000 (19:00 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 12 Apr 2023 02:00:06 +0000 (19:00 -0700)
Move the inobt record alignment checks from xchk_iallocbt_rec into
xfs_inobt_check_irec so that they are applied everywhere.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
fs/xfs/libxfs/xfs_ialloc.c
fs/xfs/scrub/ialloc.c

index b7dc8b8..0d2980a 100644 (file)
@@ -103,8 +103,12 @@ xfs_inobt_check_irec(
 {
        uint64_t                        realfree;
 
+       /* Record has to be properly aligned within the AG. */
        if (!xfs_verify_agino(cur->bc_ag.pag, irec->ir_startino))
                return __this_address;
+       if (!xfs_verify_agino(cur->bc_ag.pag,
+                               irec->ir_startino + XFS_INODES_PER_CHUNK - 1))
+               return __this_address;
        if (irec->ir_count < XFS_INODES_PER_HOLEMASK_BIT ||
            irec->ir_count > XFS_INODES_PER_CHUNK)
                return __this_address;
index 11afb4c..ca5a7e0 100644 (file)
@@ -413,7 +413,6 @@ xchk_iallocbt_rec(
        const union xfs_btree_rec       *rec)
 {
        struct xfs_mount                *mp = bs->cur->bc_mp;
-       struct xfs_perag                *pag = bs->cur->bc_ag.pag;
        struct xchk_iallocbt            *iabt = bs->private;
        struct xfs_inobt_rec_incore     irec;
        uint64_t                        holes;
@@ -431,11 +430,6 @@ xchk_iallocbt_rec(
        }
 
        agino = irec.ir_startino;
-       /* Record has to be properly aligned within the AG. */
-       if (!xfs_verify_agino(pag, agino + XFS_INODES_PER_CHUNK - 1)) {
-               xchk_btree_set_corrupt(bs->sc, bs->cur, 0);
-               goto out;
-       }
 
        xchk_iallocbt_rec_alignment(bs, &irec);
        if (bs->sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)