]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - fs/xfs/scrub/bmap.c
Merge tag 'xfs-5.15-merge-6' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
[mirror_ubuntu-jammy-kernel.git] / fs / xfs / scrub / bmap.c
index 1d146c9d9de117340714946708bea52d80f4524f..017da9ceaee9c323586d4120728d2721f798c733 100644 (file)
@@ -260,10 +260,10 @@ xchk_bmap_iextent_xref(
        agbno = XFS_FSB_TO_AGBNO(mp, irec->br_startblock);
        len = irec->br_blockcount;
 
-       error = xchk_ag_init(info->sc, agno, &info->sc->sa);
+       error = xchk_ag_init_existing(info->sc, agno, &info->sc->sa);
        if (!xchk_fblock_process_error(info->sc, info->whichfork,
                        irec->br_startoff, &error))
-               return;
+               goto out_free;
 
        xchk_xref_is_used_space(info->sc, agbno, len);
        xchk_xref_is_not_inode_chunk(info->sc, agbno, len);
@@ -283,6 +283,7 @@ xchk_bmap_iextent_xref(
                break;
        }
 
+out_free:
        xchk_ag_free(info->sc, &info->sc->sa);
 }
 
@@ -383,7 +384,7 @@ xchk_bmap_iextent(
 STATIC int
 xchk_bmapbt_rec(
        struct xchk_btree       *bs,
-       union xfs_btree_rec     *rec)
+       const union xfs_btree_rec *rec)
 {
        struct xfs_bmbt_irec    irec;
        struct xfs_bmbt_irec    iext_irec;
@@ -400,7 +401,7 @@ xchk_bmapbt_rec(
         * Check the owners of the btree blocks up to the level below
         * the root since the verifiers don't do that.
         */
-       if (xfs_sb_version_hascrc(&bs->cur->bc_mp->m_sb) &&
+       if (xfs_has_crc(bs->cur->bc_mp) &&
            bs->cur->bc_ptrs[0] == 1) {
                for (i = 0; i < bs->cur->bc_nlevels - 1; i++) {
                        block = xfs_btree_get_block(bs->cur, i, &bp);
@@ -473,10 +474,11 @@ struct xchk_bmap_check_rmap_info {
 STATIC int
 xchk_bmap_check_rmap(
        struct xfs_btree_cur            *cur,
-       struct xfs_rmap_irec            *rec,
+       const struct xfs_rmap_irec      *rec,
        void                            *priv)
 {
        struct xfs_bmbt_irec            irec;
+       struct xfs_rmap_irec            check_rec;
        struct xchk_bmap_check_rmap_info        *sbcri = priv;
        struct xfs_ifork                *ifp;
        struct xfs_scrub                *sc = sbcri->sc;
@@ -510,28 +512,30 @@ xchk_bmap_check_rmap(
         * length, so we have to loop through the bmbt to make sure that the
         * entire rmap is covered by bmbt records.
         */
+       check_rec = *rec;
        while (have_map) {
-               if (irec.br_startoff != rec->rm_offset)
+               if (irec.br_startoff != check_rec.rm_offset)
                        xchk_fblock_set_corrupt(sc, sbcri->whichfork,
-                                       rec->rm_offset);
+                                       check_rec.rm_offset);
                if (irec.br_startblock != XFS_AGB_TO_FSB(sc->mp,
-                               cur->bc_ag.pag->pag_agno, rec->rm_startblock))
+                               cur->bc_ag.pag->pag_agno,
+                               check_rec.rm_startblock))
                        xchk_fblock_set_corrupt(sc, sbcri->whichfork,
-                                       rec->rm_offset);
-               if (irec.br_blockcount > rec->rm_blockcount)
+                                       check_rec.rm_offset);
+               if (irec.br_blockcount > check_rec.rm_blockcount)
                        xchk_fblock_set_corrupt(sc, sbcri->whichfork,
-                                       rec->rm_offset);
+                                       check_rec.rm_offset);
                if (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT)
                        break;
-               rec->rm_startblock += irec.br_blockcount;
-               rec->rm_offset += irec.br_blockcount;
-               rec->rm_blockcount -= irec.br_blockcount;
-               if (rec->rm_blockcount == 0)
+               check_rec.rm_startblock += irec.br_blockcount;
+               check_rec.rm_offset += irec.br_blockcount;
+               check_rec.rm_blockcount -= irec.br_blockcount;
+               if (check_rec.rm_blockcount == 0)
                        break;
                have_map = xfs_iext_next_extent(ifp, &sbcri->icur, &irec);
                if (!have_map)
                        xchk_fblock_set_corrupt(sc, sbcri->whichfork,
-                                       rec->rm_offset);
+                                       check_rec.rm_offset);
        }
 
 out:
@@ -581,7 +585,7 @@ xchk_bmap_check_rmaps(
        bool                    zero_size;
        int                     error;
 
-       if (!xfs_sb_version_hasrmapbt(&sc->mp->m_sb) ||
+       if (!xfs_has_rmapbt(sc->mp) ||
            whichfork == XFS_COW_FORK ||
            (sc->sm->sm_flags & XFS_SCRUB_OFLAG_CORRUPT))
                return 0;
@@ -659,8 +663,7 @@ xchk_bmap(
                }
                break;
        case XFS_ATTR_FORK:
-               if (!xfs_sb_version_hasattr(&mp->m_sb) &&
-                   !xfs_sb_version_hasattr2(&mp->m_sb))
+               if (!xfs_has_attr(mp) && !xfs_has_attr2(mp))
                        xchk_ino_set_corrupt(sc, sc->ip->i_ino);
                break;
        default: