xfs: hoist rmap record flag checks from scrub
Move the rmap record flag checks from xchk_rmapbt_rec into xfs_rmap_check_irec so that they are applied everywhere. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Dave Chinner <dchinner@redhat.com>
This commit is contained in:
parent
6a3bd8fcf9
commit
7d7d6d2fd0
|
@ -212,6 +212,10 @@ xfs_rmap_check_irec(
|
|||
const struct xfs_rmap_irec *irec)
|
||||
{
|
||||
struct xfs_mount *mp = cur->bc_mp;
|
||||
bool is_inode;
|
||||
bool is_unwritten;
|
||||
bool is_bmbt;
|
||||
bool is_attr;
|
||||
|
||||
if (irec->rm_blockcount == 0)
|
||||
return __this_address;
|
||||
|
@ -232,6 +236,24 @@ xfs_rmap_check_irec(
|
|||
irec->rm_owner >= XFS_RMAP_OWN_MIN)))
|
||||
return __this_address;
|
||||
|
||||
/* Check flags. */
|
||||
is_inode = !XFS_RMAP_NON_INODE_OWNER(irec->rm_owner);
|
||||
is_bmbt = irec->rm_flags & XFS_RMAP_BMBT_BLOCK;
|
||||
is_attr = irec->rm_flags & XFS_RMAP_ATTR_FORK;
|
||||
is_unwritten = irec->rm_flags & XFS_RMAP_UNWRITTEN;
|
||||
|
||||
if (is_bmbt && irec->rm_offset != 0)
|
||||
return __this_address;
|
||||
|
||||
if (!is_inode && irec->rm_offset != 0)
|
||||
return __this_address;
|
||||
|
||||
if (is_unwritten && (is_bmbt || !is_inode || is_attr))
|
||||
return __this_address;
|
||||
|
||||
if (!is_inode && (is_bmbt || is_unwritten || is_attr))
|
||||
return __this_address;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
|
@ -94,10 +94,6 @@ xchk_rmapbt_rec(
|
|||
const union xfs_btree_rec *rec)
|
||||
{
|
||||
struct xfs_rmap_irec irec;
|
||||
bool non_inode;
|
||||
bool is_unwritten;
|
||||
bool is_bmbt;
|
||||
bool is_attr;
|
||||
|
||||
if (xfs_rmap_btrec_to_irec(rec, &irec) != NULL ||
|
||||
xfs_rmap_check_irec(bs->cur, &irec) != NULL) {
|
||||
|
@ -105,24 +101,6 @@ xchk_rmapbt_rec(
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Check flags. */
|
||||
non_inode = XFS_RMAP_NON_INODE_OWNER(irec.rm_owner);
|
||||
is_bmbt = irec.rm_flags & XFS_RMAP_BMBT_BLOCK;
|
||||
is_attr = irec.rm_flags & XFS_RMAP_ATTR_FORK;
|
||||
is_unwritten = irec.rm_flags & XFS_RMAP_UNWRITTEN;
|
||||
|
||||
if (is_bmbt && irec.rm_offset != 0)
|
||||
xchk_btree_set_corrupt(bs->sc, bs->cur, 0);
|
||||
|
||||
if (non_inode && irec.rm_offset != 0)
|
||||
xchk_btree_set_corrupt(bs->sc, bs->cur, 0);
|
||||
|
||||
if (is_unwritten && (is_bmbt || non_inode || is_attr))
|
||||
xchk_btree_set_corrupt(bs->sc, bs->cur, 0);
|
||||
|
||||
if (non_inode && (is_bmbt || is_unwritten || is_attr))
|
||||
xchk_btree_set_corrupt(bs->sc, bs->cur, 0);
|
||||
|
||||
xchk_rmapbt_xref(bs->sc, &irec);
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue