btrfs: update btrfs_add_chunk_map() to use rb helpers
Update btrfs_add_chunk_map() to use rb_find_add_cached(). Signed-off-by: Roger L. Beckermeyer III <beckerlee3@gmail.com> Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Qu Wenruo <wqu@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
0877597dc3
commit
287373c701
|
|
@ -5514,33 +5514,34 @@ void btrfs_remove_chunk_map(struct btrfs_fs_info *fs_info, struct btrfs_chunk_ma
|
|||
btrfs_free_chunk_map(map);
|
||||
}
|
||||
|
||||
static int btrfs_chunk_map_cmp(const struct rb_node *new,
|
||||
const struct rb_node *exist)
|
||||
{
|
||||
const struct btrfs_chunk_map *new_map =
|
||||
rb_entry(new, struct btrfs_chunk_map, rb_node);
|
||||
const struct btrfs_chunk_map *exist_map =
|
||||
rb_entry(exist, struct btrfs_chunk_map, rb_node);
|
||||
|
||||
if (new_map->start == exist_map->start)
|
||||
return 0;
|
||||
if (new_map->start < exist_map->start)
|
||||
return -1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
EXPORT_FOR_TESTS
|
||||
int btrfs_add_chunk_map(struct btrfs_fs_info *fs_info, struct btrfs_chunk_map *map)
|
||||
{
|
||||
struct rb_node **p;
|
||||
struct rb_node *parent = NULL;
|
||||
bool leftmost = true;
|
||||
struct rb_node *exist;
|
||||
|
||||
write_lock(&fs_info->mapping_tree_lock);
|
||||
p = &fs_info->mapping_tree.rb_root.rb_node;
|
||||
while (*p) {
|
||||
struct btrfs_chunk_map *entry;
|
||||
exist = rb_find_add_cached(&map->rb_node, &fs_info->mapping_tree,
|
||||
btrfs_chunk_map_cmp);
|
||||
|
||||
parent = *p;
|
||||
entry = rb_entry(parent, struct btrfs_chunk_map, rb_node);
|
||||
|
||||
if (map->start < entry->start) {
|
||||
p = &(*p)->rb_left;
|
||||
} else if (map->start > entry->start) {
|
||||
p = &(*p)->rb_right;
|
||||
leftmost = false;
|
||||
} else {
|
||||
write_unlock(&fs_info->mapping_tree_lock);
|
||||
return -EEXIST;
|
||||
}
|
||||
if (exist) {
|
||||
write_unlock(&fs_info->mapping_tree_lock);
|
||||
return -EEXIST;
|
||||
}
|
||||
rb_link_node(&map->rb_node, parent, p);
|
||||
rb_insert_color_cached(&map->rb_node, &fs_info->mapping_tree, leftmost);
|
||||
chunk_map_device_set_bits(map, CHUNK_ALLOCATED);
|
||||
chunk_map_device_clear_bits(map, CHUNK_TRIMMED);
|
||||
write_unlock(&fs_info->mapping_tree_lock);
|
||||
|
|
|
|||
Loading…
Reference in New Issue