Commit 186f20c0 authored by Darrick J. Wong's avatar Darrick J. Wong

xfs: factor out a btree block owner check

Hoist the btree block owner check into a separate helper so that we
don't have an ugly multiline if statement.
Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
parent 2054cf05
......@@ -1777,6 +1777,33 @@ xfs_btree_decrement(
return error;
}
/*
* Check the btree block owner now that we have the context to know who the
* real owner is.
*/
static inline xfs_failaddr_t
xfs_btree_check_block_owner(
struct xfs_btree_cur *cur,
struct xfs_btree_block *block)
{
__u64 owner;
if (!xfs_has_crc(cur->bc_mp) ||
(cur->bc_flags & XFS_BTREE_BMBT_INVALID_OWNER))
return NULL;
owner = xfs_btree_owner(cur);
if (cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) {
if (be64_to_cpu(block->bb_u.l.bb_owner) != owner)
return __this_address;
} else {
if (be32_to_cpu(block->bb_u.s.bb_owner) != owner)
return __this_address;
}
return NULL;
}
int
xfs_btree_lookup_get_block(
struct xfs_btree_cur *cur, /* btree cursor */
......@@ -1815,11 +1842,7 @@ xfs_btree_lookup_get_block(
return error;
/* Check the inode owner since the verifiers don't. */
if (xfs_has_crc(cur->bc_mp) &&
!(cur->bc_flags & XFS_BTREE_BMBT_INVALID_OWNER) &&
(cur->bc_ops->geom_flags & XFS_BTGEO_LONG_PTRS) &&
be64_to_cpu((*blkp)->bb_u.l.bb_owner) !=
cur->bc_ino.ip->i_ino)
if (xfs_btree_check_block_owner(cur, *blkp) != NULL)
goto out_bad;
/* Did we get the level we were looking for? */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment