xfs: support inode btree blockcounts in online scrub
Add the necessary bits to the online scrub code to check the inode btree counters when enabled. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Brian Foster <bfoster@redhat.com>
This commit is contained in:
parent
1ac35f061a
commit
1dbbff029f
|
@ -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(
|
||||
|
@ -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…
Reference in New Issue
Block a user