Loading fs/xfs/scrub/agheader.c +30 −0 Original line number Diff line number Diff line Loading @@ -781,6 +781,35 @@ xchk_agi_xref_icounts( xchk_block_xref_set_corrupt(sc, sc->sa.agi_bp); } /* Check agi_[fi]blocks against tree size */ static inline void xchk_agi_xref_fiblocks( struct xfs_scrub *sc) { struct xfs_agi *agi = sc->sa.agi_bp->b_addr; xfs_agblock_t blocks; int error = 0; if (!xfs_sb_version_hasinobtcounts(&sc->mp->m_sb)) return; if (sc->sa.ino_cur) { error = xfs_btree_count_blocks(sc->sa.ino_cur, &blocks); if (!xchk_should_check_xref(sc, &error, &sc->sa.ino_cur)) return; if (blocks != be32_to_cpu(agi->agi_iblocks)) xchk_block_xref_set_corrupt(sc, sc->sa.agi_bp); } if (sc->sa.fino_cur) { error = xfs_btree_count_blocks(sc->sa.fino_cur, &blocks); if (!xchk_should_check_xref(sc, &error, &sc->sa.fino_cur)) return; if (blocks != be32_to_cpu(agi->agi_fblocks)) xchk_block_xref_set_corrupt(sc, sc->sa.agi_bp); } } /* Cross-reference with the other btrees. */ STATIC void xchk_agi_xref( Loading @@ -804,6 +833,7 @@ xchk_agi_xref( xchk_agi_xref_icounts(sc); xchk_xref_is_owned_by(sc, agbno, 1, &XFS_RMAP_OINFO_FS); xchk_xref_is_not_shared(sc, agbno, 1); xchk_agi_xref_fiblocks(sc); /* scrub teardown will take care of sc->sa for us */ } Loading Loading
fs/xfs/scrub/agheader.c +30 −0 Original line number Diff line number Diff line Loading @@ -781,6 +781,35 @@ xchk_agi_xref_icounts( xchk_block_xref_set_corrupt(sc, sc->sa.agi_bp); } /* Check agi_[fi]blocks against tree size */ static inline void xchk_agi_xref_fiblocks( struct xfs_scrub *sc) { struct xfs_agi *agi = sc->sa.agi_bp->b_addr; xfs_agblock_t blocks; int error = 0; if (!xfs_sb_version_hasinobtcounts(&sc->mp->m_sb)) return; if (sc->sa.ino_cur) { error = xfs_btree_count_blocks(sc->sa.ino_cur, &blocks); if (!xchk_should_check_xref(sc, &error, &sc->sa.ino_cur)) return; if (blocks != be32_to_cpu(agi->agi_iblocks)) xchk_block_xref_set_corrupt(sc, sc->sa.agi_bp); } if (sc->sa.fino_cur) { error = xfs_btree_count_blocks(sc->sa.fino_cur, &blocks); if (!xchk_should_check_xref(sc, &error, &sc->sa.fino_cur)) return; if (blocks != be32_to_cpu(agi->agi_fblocks)) xchk_block_xref_set_corrupt(sc, sc->sa.agi_bp); } } /* Cross-reference with the other btrees. */ STATIC void xchk_agi_xref( Loading @@ -804,6 +833,7 @@ xchk_agi_xref( xchk_agi_xref_icounts(sc); xchk_xref_is_owned_by(sc, agbno, 1, &XFS_RMAP_OINFO_FS); xchk_xref_is_not_shared(sc, agbno, 1); xchk_agi_xref_fiblocks(sc); /* scrub teardown will take care of sc->sa for us */ } Loading