diff options
Diffstat (limited to 'fs/xfs/libxfs/xfs_rmap_btree.c')
| -rw-r--r-- | fs/xfs/libxfs/xfs_rmap_btree.c | 67 | 
1 files changed, 23 insertions, 44 deletions
| diff --git a/fs/xfs/libxfs/xfs_rmap_btree.c b/fs/xfs/libxfs/xfs_rmap_btree.c index 2cab694ac58a..bf16aee50d73 100644 --- a/fs/xfs/libxfs/xfs_rmap_btree.c +++ b/fs/xfs/libxfs/xfs_rmap_btree.c @@ -243,38 +243,22 @@ static inline uint64_t offset_keymask(uint64_t offset)  	return offset & ~XFS_RMAP_OFF_UNWRITTEN;  } -STATIC int64_t -xfs_rmapbt_key_diff( +STATIC int +xfs_rmapbt_cmp_key_with_cur(  	struct xfs_btree_cur		*cur,  	const union xfs_btree_key	*key)  {  	struct xfs_rmap_irec		*rec = &cur->bc_rec.r;  	const struct xfs_rmap_key	*kp = &key->rmap; -	__u64				x, y; -	int64_t				d; -	d = (int64_t)be32_to_cpu(kp->rm_startblock) - rec->rm_startblock; -	if (d) -		return d; - -	x = be64_to_cpu(kp->rm_owner); -	y = rec->rm_owner; -	if (x > y) -		return 1; -	else if (y > x) -		return -1; - -	x = offset_keymask(be64_to_cpu(kp->rm_offset)); -	y = offset_keymask(xfs_rmap_irec_offset_pack(rec)); -	if (x > y) -		return 1; -	else if (y > x) -		return -1; -	return 0; +	return cmp_int(be32_to_cpu(kp->rm_startblock), rec->rm_startblock) ?: +	       cmp_int(be64_to_cpu(kp->rm_owner), rec->rm_owner) ?: +	       cmp_int(offset_keymask(be64_to_cpu(kp->rm_offset)), +		       offset_keymask(xfs_rmap_irec_offset_pack(rec)));  } -STATIC int64_t -xfs_rmapbt_diff_two_keys( +STATIC int +xfs_rmapbt_cmp_two_keys(  	struct xfs_btree_cur		*cur,  	const union xfs_btree_key	*k1,  	const union xfs_btree_key	*k2, @@ -282,36 +266,31 @@ xfs_rmapbt_diff_two_keys(  {  	const struct xfs_rmap_key	*kp1 = &k1->rmap;  	const struct xfs_rmap_key	*kp2 = &k2->rmap; -	int64_t				d; -	__u64				x, y; +	int				d;  	/* Doesn't make sense to mask off the physical space part */  	ASSERT(!mask || mask->rmap.rm_startblock); -	d = (int64_t)be32_to_cpu(kp1->rm_startblock) - -		     be32_to_cpu(kp2->rm_startblock); +	d = cmp_int(be32_to_cpu(kp1->rm_startblock), +		    be32_to_cpu(kp2->rm_startblock));  	if (d)  		return d;  	if (!mask || mask->rmap.rm_owner) { -		x = be64_to_cpu(kp1->rm_owner); -		y = be64_to_cpu(kp2->rm_owner); -		if (x > y) -			return 1; -		else if (y > x) -			return -1; +		d = cmp_int(be64_to_cpu(kp1->rm_owner), +			    be64_to_cpu(kp2->rm_owner)); +		if (d) +			return d;  	}  	if (!mask || mask->rmap.rm_offset) {  		/* Doesn't make sense to allow offset but not owner */  		ASSERT(!mask || mask->rmap.rm_owner); -		x = offset_keymask(be64_to_cpu(kp1->rm_offset)); -		y = offset_keymask(be64_to_cpu(kp2->rm_offset)); -		if (x > y) -			return 1; -		else if (y > x) -			return -1; +		d = cmp_int(offset_keymask(be64_to_cpu(kp1->rm_offset)), +			    offset_keymask(be64_to_cpu(kp2->rm_offset))); +		if (d) +			return d;  	}  	return 0; @@ -515,9 +494,9 @@ const struct xfs_btree_ops xfs_rmapbt_ops = {  	.init_high_key_from_rec	= xfs_rmapbt_init_high_key_from_rec,  	.init_rec_from_cur	= xfs_rmapbt_init_rec_from_cur,  	.init_ptr_from_cur	= xfs_rmapbt_init_ptr_from_cur, -	.key_diff		= xfs_rmapbt_key_diff, +	.cmp_key_with_cur	= xfs_rmapbt_cmp_key_with_cur,  	.buf_ops		= &xfs_rmapbt_buf_ops, -	.diff_two_keys		= xfs_rmapbt_diff_two_keys, +	.cmp_two_keys		= xfs_rmapbt_cmp_two_keys,  	.keys_inorder		= xfs_rmapbt_keys_inorder,  	.recs_inorder		= xfs_rmapbt_recs_inorder,  	.keys_contiguous	= xfs_rmapbt_keys_contiguous, @@ -632,9 +611,9 @@ const struct xfs_btree_ops xfs_rmapbt_mem_ops = {  	.init_high_key_from_rec	= xfs_rmapbt_init_high_key_from_rec,  	.init_rec_from_cur	= xfs_rmapbt_init_rec_from_cur,  	.init_ptr_from_cur	= xfbtree_init_ptr_from_cur, -	.key_diff		= xfs_rmapbt_key_diff, +	.cmp_key_with_cur	= xfs_rmapbt_cmp_key_with_cur,  	.buf_ops		= &xfs_rmapbt_mem_buf_ops, -	.diff_two_keys		= xfs_rmapbt_diff_two_keys, +	.cmp_two_keys		= xfs_rmapbt_cmp_two_keys,  	.keys_inorder		= xfs_rmapbt_keys_inorder,  	.recs_inorder		= xfs_rmapbt_recs_inorder,  	.keys_contiguous	= xfs_rmapbt_keys_contiguous, | 
