Lines Matching refs:leaf

57 static unsigned int leaf_data_end(const struct extent_buffer *leaf)  in leaf_data_end()  argument
59 u32 nr = btrfs_header_nritems(leaf); in leaf_data_end()
62 return BTRFS_LEAF_DATA_SIZE(leaf->fs_info); in leaf_data_end()
63 return btrfs_item_offset(leaf, nr - 1); in leaf_data_end()
79 static inline void memmove_leaf_data(const struct extent_buffer *leaf, in memmove_leaf_data() argument
84 memmove_extent_buffer(leaf, btrfs_item_nr_offset(leaf, 0) + dst_offset, in memmove_leaf_data()
85 btrfs_item_nr_offset(leaf, 0) + src_offset, len); in memmove_leaf_data()
122 static inline void memmove_leaf_items(const struct extent_buffer *leaf, in memmove_leaf_items() argument
125 memmove_extent_buffer(leaf, btrfs_item_nr_offset(leaf, dst_item), in memmove_leaf_items()
126 btrfs_item_nr_offset(leaf, src_item), in memmove_leaf_items()
1980 struct extent_buffer *leaf = path->nodes[0]; in search_leaf() local
1998 leaf_free_space = btrfs_leaf_free_space(leaf); in search_leaf()
2007 ASSERT(btrfs_header_nritems(leaf) > 0); in search_leaf()
2008 btrfs_item_key(leaf, &first_key, 0); in search_leaf()
2062 ret = search_for_key_slot(leaf, search_low_slot, key, in search_leaf()
2575 struct extent_buffer *leaf; in btrfs_search_slot_for_read() local
2588 leaf = p->nodes[0]; in btrfs_search_slot_for_read()
2591 if (p->slots[0] >= btrfs_header_nritems(leaf)) { in btrfs_search_slot_for_read()
2612 leaf = p->nodes[0]; in btrfs_search_slot_for_read()
2613 if (p->slots[0] == btrfs_header_nritems(leaf)) in btrfs_search_slot_for_read()
3220 int btrfs_leaf_free_space(const struct extent_buffer *leaf) in btrfs_leaf_free_space() argument
3222 struct btrfs_fs_info *fs_info = leaf->fs_info; in btrfs_leaf_free_space()
3223 int nritems = btrfs_header_nritems(leaf); in btrfs_leaf_free_space()
3226 ret = BTRFS_LEAF_DATA_SIZE(fs_info) - leaf_space_used(leaf, 0, nritems); in btrfs_leaf_free_space()
3232 leaf_space_used(leaf, 0, nritems), nritems); in btrfs_leaf_free_space()
3976 struct extent_buffer *leaf; in setup_leaf_for_split() local
3982 leaf = path->nodes[0]; in setup_leaf_for_split()
3983 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in setup_leaf_for_split()
3988 if (btrfs_leaf_free_space(leaf) >= ins_len) in setup_leaf_for_split()
3991 item_size = btrfs_item_size(leaf, path->slots[0]); in setup_leaf_for_split()
3993 fi = btrfs_item_ptr(leaf, path->slots[0], in setup_leaf_for_split()
3995 extent_len = btrfs_file_extent_num_bytes(leaf, fi); in setup_leaf_for_split()
4009 leaf = path->nodes[0]; in setup_leaf_for_split()
4011 if (item_size != btrfs_item_size(leaf, path->slots[0])) in setup_leaf_for_split()
4019 fi = btrfs_item_ptr(leaf, path->slots[0], in setup_leaf_for_split()
4021 if (extent_len != btrfs_file_extent_num_bytes(leaf, fi)) in setup_leaf_for_split()
4042 struct extent_buffer *leaf; in split_item() local
4050 leaf = path->nodes[0]; in split_item()
4055 if (WARN_ON(btrfs_leaf_free_space(leaf) < sizeof(struct btrfs_item))) in split_item()
4059 orig_offset = btrfs_item_offset(leaf, path->slots[0]); in split_item()
4060 item_size = btrfs_item_size(leaf, path->slots[0]); in split_item()
4066 read_extent_buffer(leaf, buf, btrfs_item_ptr_offset(leaf, in split_item()
4070 nritems = btrfs_header_nritems(leaf); in split_item()
4073 memmove_leaf_items(leaf, slot + 1, slot, nritems - slot); in split_item()
4077 btrfs_set_item_key(leaf, &disk_key, slot); in split_item()
4079 btrfs_set_item_offset(leaf, slot, orig_offset); in split_item()
4080 btrfs_set_item_size(leaf, slot, item_size - split_offset); in split_item()
4082 btrfs_set_item_offset(leaf, orig_slot, in split_item()
4084 btrfs_set_item_size(leaf, orig_slot, split_offset); in split_item()
4086 btrfs_set_header_nritems(leaf, nritems + 1); in split_item()
4089 write_extent_buffer(leaf, buf, in split_item()
4090 btrfs_item_ptr_offset(leaf, path->slots[0]), in split_item()
4094 write_extent_buffer(leaf, buf + split_offset, in split_item()
4095 btrfs_item_ptr_offset(leaf, slot), in split_item()
4097 btrfs_mark_buffer_dirty(trans, leaf); in split_item()
4099 BUG_ON(btrfs_leaf_free_space(leaf) < 0); in split_item()
4145 struct extent_buffer *leaf; in btrfs_truncate_item() local
4154 leaf = path->nodes[0]; in btrfs_truncate_item()
4157 old_size = btrfs_item_size(leaf, slot); in btrfs_truncate_item()
4161 nritems = btrfs_header_nritems(leaf); in btrfs_truncate_item()
4162 data_end = leaf_data_end(leaf); in btrfs_truncate_item()
4164 old_data_start = btrfs_item_offset(leaf, slot); in btrfs_truncate_item()
4175 btrfs_init_map_token(&token, leaf); in btrfs_truncate_item()
4185 memmove_leaf_data(leaf, data_end + size_diff, data_end, in btrfs_truncate_item()
4191 btrfs_item_key(leaf, &disk_key, slot); in btrfs_truncate_item()
4197 fi = btrfs_item_ptr(leaf, slot, in btrfs_truncate_item()
4202 if (btrfs_file_extent_type(leaf, fi) == in btrfs_truncate_item()
4204 ptr = btrfs_item_ptr_offset(leaf, slot); in btrfs_truncate_item()
4205 memmove_extent_buffer(leaf, ptr, in btrfs_truncate_item()
4211 memmove_leaf_data(leaf, data_end + size_diff, data_end, in btrfs_truncate_item()
4216 btrfs_set_item_key(leaf, &disk_key, slot); in btrfs_truncate_item()
4221 btrfs_set_item_size(leaf, slot, new_size); in btrfs_truncate_item()
4222 btrfs_mark_buffer_dirty(trans, leaf); in btrfs_truncate_item()
4224 if (btrfs_leaf_free_space(leaf) < 0) { in btrfs_truncate_item()
4225 btrfs_print_leaf(leaf); in btrfs_truncate_item()
4237 struct extent_buffer *leaf; in btrfs_extend_item() local
4245 leaf = path->nodes[0]; in btrfs_extend_item()
4247 nritems = btrfs_header_nritems(leaf); in btrfs_extend_item()
4248 data_end = leaf_data_end(leaf); in btrfs_extend_item()
4250 if (btrfs_leaf_free_space(leaf) < data_size) { in btrfs_extend_item()
4251 btrfs_print_leaf(leaf); in btrfs_extend_item()
4255 old_data = btrfs_item_data_end(leaf, slot); in btrfs_extend_item()
4259 btrfs_print_leaf(leaf); in btrfs_extend_item()
4260 btrfs_crit(leaf->fs_info, "slot %d too large, nritems %d", in btrfs_extend_item()
4269 btrfs_init_map_token(&token, leaf); in btrfs_extend_item()
4278 memmove_leaf_data(leaf, data_end - data_size, data_end, in btrfs_extend_item()
4282 old_size = btrfs_item_size(leaf, slot); in btrfs_extend_item()
4283 btrfs_set_item_size(leaf, slot, old_size + data_size); in btrfs_extend_item()
4284 btrfs_mark_buffer_dirty(trans, leaf); in btrfs_extend_item()
4286 if (btrfs_leaf_free_space(leaf) < 0) { in btrfs_extend_item()
4287 btrfs_print_leaf(leaf); in btrfs_extend_item()
4312 struct extent_buffer *leaf; in setup_items_for_insert() local
4328 leaf = path->nodes[0]; in setup_items_for_insert()
4331 nritems = btrfs_header_nritems(leaf); in setup_items_for_insert()
4332 data_end = leaf_data_end(leaf); in setup_items_for_insert()
4335 if (btrfs_leaf_free_space(leaf) < total_size) { in setup_items_for_insert()
4336 btrfs_print_leaf(leaf); in setup_items_for_insert()
4338 total_size, btrfs_leaf_free_space(leaf)); in setup_items_for_insert()
4342 btrfs_init_map_token(&token, leaf); in setup_items_for_insert()
4344 unsigned int old_data = btrfs_item_data_end(leaf, slot); in setup_items_for_insert()
4347 btrfs_print_leaf(leaf); in setup_items_for_insert()
4365 memmove_leaf_items(leaf, slot + batch->nr, slot, nritems - slot); in setup_items_for_insert()
4368 memmove_leaf_data(leaf, data_end - batch->total_data_size, in setup_items_for_insert()
4376 btrfs_set_item_key(leaf, &disk_key, slot + i); in setup_items_for_insert()
4382 btrfs_set_header_nritems(leaf, nritems + batch->nr); in setup_items_for_insert()
4383 btrfs_mark_buffer_dirty(trans, leaf); in setup_items_for_insert()
4385 if (btrfs_leaf_free_space(leaf) < 0) { in setup_items_for_insert()
4386 btrfs_print_leaf(leaf); in setup_items_for_insert()
4453 struct extent_buffer *leaf; in btrfs_insert_item() local
4461 leaf = path->nodes[0]; in btrfs_insert_item()
4462 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]); in btrfs_insert_item()
4463 write_extent_buffer(leaf, data, ptr, data_size); in btrfs_insert_item()
4464 btrfs_mark_buffer_dirty(trans, leaf); in btrfs_insert_item()
4483 struct extent_buffer *leaf; in btrfs_duplicate_item() local
4487 leaf = path->nodes[0]; in btrfs_duplicate_item()
4488 item_size = btrfs_item_size(leaf, path->slots[0]); in btrfs_duplicate_item()
4496 leaf = path->nodes[0]; in btrfs_duplicate_item()
4497 memcpy_extent_buffer(leaf, in btrfs_duplicate_item()
4498 btrfs_item_ptr_offset(leaf, path->slots[0]), in btrfs_duplicate_item()
4499 btrfs_item_ptr_offset(leaf, path->slots[0] - 1), in btrfs_duplicate_item()
4572 struct extent_buffer *leaf) in btrfs_del_leaf() argument
4576 WARN_ON(btrfs_header_generation(leaf) != trans->transid); in btrfs_del_leaf()
4587 root_sub_used(root, leaf->len); in btrfs_del_leaf()
4589 atomic_inc(&leaf->refs); in btrfs_del_leaf()
4590 btrfs_free_tree_block(trans, btrfs_root_id(root), leaf, 0, 1); in btrfs_del_leaf()
4591 free_extent_buffer_stale(leaf); in btrfs_del_leaf()
4602 struct extent_buffer *leaf; in btrfs_del_items() local
4607 leaf = path->nodes[0]; in btrfs_del_items()
4608 nritems = btrfs_header_nritems(leaf); in btrfs_del_items()
4611 const u32 last_off = btrfs_item_offset(leaf, slot + nr - 1); in btrfs_del_items()
4612 const int data_end = leaf_data_end(leaf); in btrfs_del_items()
4618 dsize += btrfs_item_size(leaf, slot + i); in btrfs_del_items()
4620 memmove_leaf_data(leaf, data_end + dsize, data_end, in btrfs_del_items()
4623 btrfs_init_map_token(&token, leaf); in btrfs_del_items()
4631 memmove_leaf_items(leaf, slot, slot + nr, nritems - slot - nr); in btrfs_del_items()
4633 btrfs_set_header_nritems(leaf, nritems - nr); in btrfs_del_items()
4638 if (leaf == root->node) { in btrfs_del_items()
4639 btrfs_set_header_level(leaf, 0); in btrfs_del_items()
4641 btrfs_clear_buffer_dirty(trans, leaf); in btrfs_del_items()
4642 ret = btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
4647 int used = leaf_space_used(leaf, 0, nritems); in btrfs_del_items()
4651 btrfs_item_key(leaf, &disk_key, 0); in btrfs_del_items()
4671 atomic_inc(&leaf->refs); in btrfs_del_items()
4677 btrfs_item_size(leaf, 0); in btrfs_del_items()
4683 if (path->nodes[0] == leaf && in btrfs_del_items()
4684 btrfs_header_nritems(leaf)) { in btrfs_del_items()
4695 nritems = btrfs_header_nritems(leaf); in btrfs_del_items()
4696 min_push_space = leaf_space_used(leaf, 0, nritems); in btrfs_del_items()
4703 if (btrfs_header_nritems(leaf) == 0) { in btrfs_del_items()
4705 ret = btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
4708 free_extent_buffer(leaf); in btrfs_del_items()
4716 if (path->nodes[0] == leaf) in btrfs_del_items()
4717 btrfs_mark_buffer_dirty(trans, leaf); in btrfs_del_items()
4718 free_extent_buffer(leaf); in btrfs_del_items()
4721 btrfs_mark_buffer_dirty(trans, leaf); in btrfs_del_items()
5146 struct extent_buffer *leaf; in btrfs_previous_item() local
5158 leaf = path->nodes[0]; in btrfs_previous_item()
5159 nritems = btrfs_header_nritems(leaf); in btrfs_previous_item()
5165 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); in btrfs_previous_item()
5187 struct extent_buffer *leaf; in btrfs_previous_extent_item() local
5199 leaf = path->nodes[0]; in btrfs_previous_extent_item()
5200 nritems = btrfs_header_nritems(leaf); in btrfs_previous_extent_item()
5206 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); in btrfs_previous_extent_item()