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: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
2054cf0516
commit
186f20c003
@ -1777,6 +1777,33 @@ error0:
|
||||
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? */
|
||||
|
Loading…
Reference in New Issue
Block a user