xfs: stricter btree height checking when looking for errors
Since each btree type has its own precomputed maxlevels variable now, use them instead of the generic XFS_BTREE_MAXLEVELS to check the level of each per-AG btree. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Chandan Babu R <chandan.babu@oracle.com>
This commit is contained in:
parent
510a28e195
commit
f4585e8234
@ -555,11 +555,11 @@ xchk_agf(
|
||||
xchk_block_set_corrupt(sc, sc->sa.agf_bp);
|
||||
|
||||
level = be32_to_cpu(agf->agf_levels[XFS_BTNUM_BNO]);
|
||||
if (level <= 0 || level > XFS_BTREE_MAXLEVELS)
|
||||
if (level <= 0 || level > mp->m_ag_maxlevels)
|
||||
xchk_block_set_corrupt(sc, sc->sa.agf_bp);
|
||||
|
||||
level = be32_to_cpu(agf->agf_levels[XFS_BTNUM_CNT]);
|
||||
if (level <= 0 || level > XFS_BTREE_MAXLEVELS)
|
||||
if (level <= 0 || level > mp->m_ag_maxlevels)
|
||||
xchk_block_set_corrupt(sc, sc->sa.agf_bp);
|
||||
|
||||
if (xfs_has_rmapbt(mp)) {
|
||||
@ -568,7 +568,7 @@ xchk_agf(
|
||||
xchk_block_set_corrupt(sc, sc->sa.agf_bp);
|
||||
|
||||
level = be32_to_cpu(agf->agf_levels[XFS_BTNUM_RMAP]);
|
||||
if (level <= 0 || level > XFS_BTREE_MAXLEVELS)
|
||||
if (level <= 0 || level > mp->m_rmap_maxlevels)
|
||||
xchk_block_set_corrupt(sc, sc->sa.agf_bp);
|
||||
}
|
||||
|
||||
@ -578,7 +578,7 @@ xchk_agf(
|
||||
xchk_block_set_corrupt(sc, sc->sa.agf_bp);
|
||||
|
||||
level = be32_to_cpu(agf->agf_refcount_level);
|
||||
if (level <= 0 || level > XFS_BTREE_MAXLEVELS)
|
||||
if (level <= 0 || level > mp->m_refc_maxlevels)
|
||||
xchk_block_set_corrupt(sc, sc->sa.agf_bp);
|
||||
}
|
||||
|
||||
@ -850,6 +850,7 @@ xchk_agi(
|
||||
struct xfs_mount *mp = sc->mp;
|
||||
struct xfs_agi *agi;
|
||||
struct xfs_perag *pag;
|
||||
struct xfs_ino_geometry *igeo = M_IGEO(sc->mp);
|
||||
xfs_agnumber_t agno = sc->sm->sm_agno;
|
||||
xfs_agblock_t agbno;
|
||||
xfs_agblock_t eoag;
|
||||
@ -880,7 +881,7 @@ xchk_agi(
|
||||
xchk_block_set_corrupt(sc, sc->sa.agi_bp);
|
||||
|
||||
level = be32_to_cpu(agi->agi_level);
|
||||
if (level <= 0 || level > XFS_BTREE_MAXLEVELS)
|
||||
if (level <= 0 || level > igeo->inobt_maxlevels)
|
||||
xchk_block_set_corrupt(sc, sc->sa.agi_bp);
|
||||
|
||||
if (xfs_has_finobt(mp)) {
|
||||
@ -889,7 +890,7 @@ xchk_agi(
|
||||
xchk_block_set_corrupt(sc, sc->sa.agi_bp);
|
||||
|
||||
level = be32_to_cpu(agi->agi_free_level);
|
||||
if (level <= 0 || level > XFS_BTREE_MAXLEVELS)
|
||||
if (level <= 0 || level > igeo->inobt_maxlevels)
|
||||
xchk_block_set_corrupt(sc, sc->sa.agi_bp);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user