Skip to content

Commit 4959038

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

File tree

1 file changed

+29
-31
lines changed

1 file changed

+29
-31
lines changed

fs/btrfs/qgroup.c

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4685,6 +4685,14 @@ static int btrfs_qgroup_swapped_block_key_cmp(const void *k, const struct rb_nod
46854685
return 0;
46864686
}
46874687

4688+
static int btrfs_qgroup_swapped_block_cmp(struct rb_node *new, const struct rb_node *exist)
4689+
{
4690+
const struct btrfs_qgroup_swapped_block *new_block =
4691+
rb_entry(new, struct btrfs_qgroup_swapped_block, node);
4692+
4693+
return btrfs_qgroup_swapped_block_key_cmp(&new_block->subvol_bytenr, exist);
4694+
}
4695+
46884696
/*
46894697
* Add subtree roots record into @subvol_root.
46904698
*
@@ -4704,8 +4712,7 @@ int btrfs_qgroup_add_swapped_blocks(struct btrfs_root *subvol_root,
47044712
struct btrfs_fs_info *fs_info = subvol_root->fs_info;
47054713
struct btrfs_qgroup_swapped_blocks *blocks = &subvol_root->swapped_blocks;
47064714
struct btrfs_qgroup_swapped_block *block;
4707-
struct rb_node **cur;
4708-
struct rb_node *parent = NULL;
4715+
struct rb_node *exist;
47094716
int level = btrfs_header_level(subvol_parent) - 1;
47104717
int ret = 0;
47114718

@@ -4754,40 +4761,31 @@ int btrfs_qgroup_add_swapped_blocks(struct btrfs_root *subvol_root,
47544761

47554762
/* Insert @block into @blocks */
47564763
spin_lock(&blocks->lock);
4757-
cur = &blocks->blocks[level].rb_node;
4758-
while (*cur) {
4764+
exist = rb_find_add(&block->node, &blocks->blocks[level],
4765+
btrfs_qgroup_swapped_block_cmp);
4766+
if (exist) {
47594767
struct btrfs_qgroup_swapped_block *entry;
47604768

4761-
parent = *cur;
4762-
entry = rb_entry(parent, struct btrfs_qgroup_swapped_block,
4769+
entry = rb_entry(exist, struct btrfs_qgroup_swapped_block,
47634770
node);
4764-
4765-
if (entry->subvol_bytenr < block->subvol_bytenr) {
4766-
cur = &(*cur)->rb_left;
4767-
} else if (entry->subvol_bytenr > block->subvol_bytenr) {
4768-
cur = &(*cur)->rb_right;
4769-
} else {
4770-
if (entry->subvol_generation !=
4771-
block->subvol_generation ||
4772-
entry->reloc_bytenr != block->reloc_bytenr ||
4773-
entry->reloc_generation !=
4774-
block->reloc_generation) {
4775-
/*
4776-
* Duplicated but mismatch entry found.
4777-
* Shouldn't happen.
4778-
*
4779-
* Marking qgroup inconsistent should be enough
4780-
* for end users.
4781-
*/
4782-
DEBUG_WARN("duplicated but mismatched entry found");
4783-
ret = -EEXIST;
4784-
}
4785-
kfree(block);
4786-
goto out_unlock;
4771+
if (entry->subvol_generation !=
4772+
block->subvol_generation ||
4773+
entry->reloc_bytenr != block->reloc_bytenr ||
4774+
entry->reloc_generation !=
4775+
block->reloc_generation) {
4776+
/*
4777+
* Duplicated but mismatch entry found.
4778+
* Shouldn't happen.
4779+
*
4780+
* Marking qgroup inconsistent should be enough
4781+
* for end users.
4782+
*/
4783+
DEBUG_WARN("duplicated but mismatched entry found");
4784+
ret = -EEXIST;
47874785
}
4786+
kfree(block);
4787+
goto out_unlock;
47884788
}
4789-
rb_link_node(&block->node, parent, cur);
4790-
rb_insert_color(&block->node, &blocks->blocks[level]);
47914789
blocks->swapped = true;
47924790
out_unlock:
47934791
spin_unlock(&blocks->lock);

0 commit comments

Comments
 (0)