Skip to content

Commit 6e1bd13

Browse files
bbkzzkdave
authored andcommitted
btrfs: update btrfs_qgroup_trace_subtree_after_cow to to use rb helper
Update btrfs_qgroup_trace_subtree_after_cow() to use rb_find(). Suggested-by: David Sterba <[email protected]> Signed-off-by: Yangtao Li <[email protected]> Signed-off-by: David Sterba <[email protected]>
1 parent 8f484b1 commit 6e1bd13

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

fs/btrfs/qgroup.c

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4671,6 +4671,20 @@ void btrfs_qgroup_clean_swapped_blocks(struct btrfs_root *root)
46714671
spin_unlock(&swapped_blocks->lock);
46724672
}
46734673

4674+
static int btrfs_qgroup_swapped_block_key_cmp(const void *k, const struct rb_node *node)
4675+
{
4676+
const u64 *bytenr = k;
4677+
const struct btrfs_qgroup_swapped_block *block =
4678+
rb_entry(node, struct btrfs_qgroup_swapped_block, node);
4679+
4680+
if (block->subvol_bytenr < *bytenr)
4681+
return -1;
4682+
else if (block->subvol_bytenr > *bytenr)
4683+
return 1;
4684+
4685+
return 0;
4686+
}
4687+
46744688
/*
46754689
* Add subtree roots record into @subvol_root.
46764690
*
@@ -4799,7 +4813,6 @@ int btrfs_qgroup_trace_subtree_after_cow(struct btrfs_trans_handle *trans,
47994813
struct btrfs_qgroup_swapped_block *block;
48004814
struct extent_buffer *reloc_eb = NULL;
48014815
struct rb_node *node;
4802-
bool found = false;
48034816
bool swapped = false;
48044817
int level = btrfs_header_level(subvol_eb);
48054818
int ret = 0;
@@ -4815,23 +4828,14 @@ int btrfs_qgroup_trace_subtree_after_cow(struct btrfs_trans_handle *trans,
48154828
spin_unlock(&blocks->lock);
48164829
return 0;
48174830
}
4818-
node = blocks->blocks[level].rb_node;
4819-
4820-
while (node) {
4821-
block = rb_entry(node, struct btrfs_qgroup_swapped_block, node);
4822-
if (block->subvol_bytenr < subvol_eb->start) {
4823-
node = node->rb_left;
4824-
} else if (block->subvol_bytenr > subvol_eb->start) {
4825-
node = node->rb_right;
4826-
} else {
4827-
found = true;
4828-
break;
4829-
}
4830-
}
4831-
if (!found) {
4831+
node = rb_find(&subvol_eb->start, &blocks->blocks[level],
4832+
btrfs_qgroup_swapped_block_key_cmp);
4833+
if (!node) {
48324834
spin_unlock(&blocks->lock);
48334835
goto out;
48344836
}
4837+
block = rb_entry(node, struct btrfs_qgroup_swapped_block, node);
4838+
48354839
/* Found one, remove it from @blocks first and update blocks->swapped */
48364840
rb_erase(&block->node, &blocks->blocks[level]);
48374841
for (i = 0; i < BTRFS_MAX_LEVEL; i++) {

0 commit comments

Comments
 (0)