mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:02:20 +00:00
xfs: add a xfs_btree_ptrs_equal helper
This only has a single caller and thus might be a bit questionable, but I think it really improves the readability of xfs_btree_visit_block. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
This commit is contained in:
parent
5076a6040c
commit
8c1771c45d
@ -1043,6 +1043,17 @@ xfs_btree_set_ptr_null(
|
||||
ptr->s = cpu_to_be32(NULLAGBLOCK);
|
||||
}
|
||||
|
||||
static inline bool
|
||||
xfs_btree_ptrs_equal(
|
||||
struct xfs_btree_cur *cur,
|
||||
union xfs_btree_ptr *ptr1,
|
||||
union xfs_btree_ptr *ptr2)
|
||||
{
|
||||
if (cur->bc_ops->ptr_len == XFS_BTREE_LONG_PTR_LEN)
|
||||
return ptr1->l == ptr2->l;
|
||||
return ptr1->s == ptr2->s;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get/set/init sibling pointers
|
||||
*/
|
||||
@ -4365,7 +4376,7 @@ xfs_btree_visit_block(
|
||||
{
|
||||
struct xfs_btree_block *block;
|
||||
struct xfs_buf *bp;
|
||||
union xfs_btree_ptr rptr;
|
||||
union xfs_btree_ptr rptr, bufptr;
|
||||
int error;
|
||||
|
||||
/* do right sibling readahead */
|
||||
@ -4388,19 +4399,12 @@ xfs_btree_visit_block(
|
||||
* return the same block without checking if the right sibling points
|
||||
* back to us and creates a cyclic reference in the btree.
|
||||
*/
|
||||
if (cur->bc_ops->ptr_len == XFS_BTREE_LONG_PTR_LEN) {
|
||||
if (be64_to_cpu(rptr.l) == XFS_DADDR_TO_FSB(cur->bc_mp,
|
||||
xfs_buf_daddr(bp))) {
|
||||
xfs_btree_mark_sick(cur);
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
} else {
|
||||
if (be32_to_cpu(rptr.s) == xfs_daddr_to_agbno(cur->bc_mp,
|
||||
xfs_buf_daddr(bp))) {
|
||||
xfs_btree_mark_sick(cur);
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
xfs_btree_buf_to_ptr(cur, bp, &bufptr);
|
||||
if (xfs_btree_ptrs_equal(cur, &rptr, &bufptr)) {
|
||||
xfs_btree_mark_sick(cur);
|
||||
return -EFSCORRUPTED;
|
||||
}
|
||||
|
||||
return xfs_btree_lookup_get_block(cur, level, &rptr, &block);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user