Split out a helper to calculate the owner for a given btree instead of dulicating the logic in two places. Signed-off-by: Christoph Hellwig <hch@xxxxxx> --- fs/xfs/libxfs/xfs_btree.c | 52 +++++++++++++++-------------------- fs/xfs/libxfs/xfs_btree_mem.h | 5 ---- fs/xfs/scrub/xfbtree.c | 29 ------------------- 3 files changed, 22 insertions(+), 64 deletions(-) diff --git a/fs/xfs/libxfs/xfs_btree.c b/fs/xfs/libxfs/xfs_btree.c index 3bc8aa6049b9a7..bd51c428f66780 100644 --- a/fs/xfs/libxfs/xfs_btree.c +++ b/fs/xfs/libxfs/xfs_btree.c @@ -1298,6 +1298,19 @@ xfs_btree_init_buf( bp->b_ops = ops->buf_ops; } +static uint64_t +xfs_btree_owner( + struct xfs_btree_cur *cur) +{ +#ifdef CONFIG_XFS_BTREE_IN_XFILE + if (cur->bc_flags & XFS_BTREE_IN_XFILE) + return cur->bc_mem.xfbtree->owner; +#endif + if (cur->bc_flags & XFS_BTREE_LONG_PTRS) + return cur->bc_ino.ip->i_ino; + return cur->bc_ag.pag->pag_agno; +} + void xfs_btree_init_block_cur( struct xfs_btree_cur *cur, @@ -1305,22 +1318,8 @@ xfs_btree_init_block_cur( int level, int numrecs) { - __u64 owner; - - /* - * we can pull the owner from the cursor right now as the different - * owners align directly with the pointer size of the btree. This may - * change in future, but is safe for current users of the generic btree - * code. - */ - if (cur->bc_flags & XFS_BTREE_IN_XFILE) - owner = xfbtree_owner(cur); - else if (cur->bc_flags & XFS_BTREE_LONG_PTRS) - owner = cur->bc_ino.ip->i_ino; - else - owner = cur->bc_ag.pag->pag_agno; - - xfs_btree_init_buf(cur->bc_mp, bp, cur->bc_ops, level, numrecs, owner); + xfs_btree_init_buf(cur->bc_mp, bp, cur->bc_ops, level, numrecs, + xfs_btree_owner(cur)); } /* @@ -1875,25 +1874,18 @@ xfs_btree_check_block_owner( struct xfs_btree_cur *cur, struct xfs_btree_block *block) { - if (!xfs_has_crc(cur->bc_mp)) + if (!xfs_has_crc(cur->bc_mp) || + (cur->bc_flags & XFS_BTREE_BMBT_INVALID_OWNER)) return NULL; - if (cur->bc_flags & XFS_BTREE_IN_XFILE) - return xfbtree_check_block_owner(cur, block); - - if (!(cur->bc_flags & XFS_BTREE_LONG_PTRS)) { - if (be32_to_cpu(block->bb_u.s.bb_owner) != - cur->bc_ag.pag->pag_agno) + if (cur->bc_flags & XFS_BTREE_LONG_PTRS) { + if (be64_to_cpu(block->bb_u.l.bb_owner) != xfs_btree_owner(cur)) + return __this_address; + } else { + if (be32_to_cpu(block->bb_u.s.bb_owner) != xfs_btree_owner(cur)) return __this_address; - return NULL; } - if (cur->bc_flags & XFS_BTREE_BMBT_INVALID_OWNER) - return NULL; - - if (be64_to_cpu(block->bb_u.l.bb_owner) != cur->bc_ino.ip->i_ino) - return __this_address; - return NULL; } diff --git a/fs/xfs/libxfs/xfs_btree_mem.h b/fs/xfs/libxfs/xfs_btree_mem.h index eeb3340a22d201..3a5492c2cc26b6 100644 --- a/fs/xfs/libxfs/xfs_btree_mem.h +++ b/fs/xfs/libxfs/xfs_btree_mem.h @@ -43,9 +43,6 @@ void xfbtree_init_ptr_from_cur(struct xfs_btree_cur *cur, struct xfs_btree_cur *xfbtree_dup_cursor(struct xfs_btree_cur *cur); bool xfbtree_verify_xfileoff(struct xfs_btree_cur *cur, unsigned long long xfoff); -xfs_failaddr_t xfbtree_check_block_owner(struct xfs_btree_cur *cur, - struct xfs_btree_block *block); -unsigned long long xfbtree_owner(struct xfs_btree_cur *cur); xfs_failaddr_t xfbtree_lblock_verify(struct xfs_buf *bp, unsigned int max_recs); xfs_failaddr_t xfbtree_sblock_verify(struct xfs_buf *bp, unsigned int max_recs); unsigned long long xfbtree_buf_to_xfoff(struct xfs_btree_cur *cur, @@ -102,8 +99,6 @@ static inline unsigned int xfbtree_bbsize(void) #define xfbtree_alloc_block NULL #define xfbtree_free_block NULL #define xfbtree_verify_xfileoff(cur, xfoff) (false) -#define xfbtree_check_block_owner(cur, block) NULL -#define xfbtree_owner(cur) (0ULL) #define xfbtree_buf_to_xfoff(cur, bp) (-1) static inline int diff --git a/fs/xfs/scrub/xfbtree.c b/fs/xfs/scrub/xfbtree.c index 63b69aeadc623d..11dad651508067 100644 --- a/fs/xfs/scrub/xfbtree.c +++ b/fs/xfs/scrub/xfbtree.c @@ -165,35 +165,6 @@ xfbtree_dup_cursor( return ncur; } -/* Check the owner of an in-memory btree block. */ -xfs_failaddr_t -xfbtree_check_block_owner( - struct xfs_btree_cur *cur, - struct xfs_btree_block *block) -{ - struct xfbtree *xfbt = cur->bc_mem.xfbtree; - - if (cur->bc_flags & XFS_BTREE_LONG_PTRS) { - if (be64_to_cpu(block->bb_u.l.bb_owner) != xfbt->owner) - return __this_address; - - return NULL; - } - - if (be32_to_cpu(block->bb_u.s.bb_owner) != xfbt->owner) - return __this_address; - - return NULL; -} - -/* Return the owner of this in-memory btree. */ -unsigned long long -xfbtree_owner( - struct xfs_btree_cur *cur) -{ - return cur->bc_mem.xfbtree->owner; -} - /* Return the xfile offset (in blocks) of a btree buffer. */ unsigned long long xfbtree_buf_to_xfoff( -- 2.39.2