Lines Matching refs:level
54 static int find_next_key(struct btrfs_path *path, int level,
783 static int find_next_key(struct btrfs_path *path, int level, in find_next_key() argument
787 for (; level < BTRFS_MAX_LEVEL; level++) { in find_next_key()
788 if (!path->nodes[level]) in find_next_key()
790 if (path->slots[level] + 1 >= in find_next_key()
791 btrfs_header_nritems(path->nodes[level])) in find_next_key()
793 if (level == 0) in find_next_key()
794 btrfs_item_key_to_cpu(path->nodes[level], key, in find_next_key()
795 path->slots[level] + 1); in find_next_key()
797 btrfs_node_key_to_cpu(path->nodes[level], key, in find_next_key()
798 path->slots[level] + 1); in find_next_key()
1578 key.offset = extent_op->level; in run_delayed_extent_op()
1666 ref->level, 0, 1, extent_op); in run_delayed_tree_ref()
1669 ref->level, 0, 1, extent_op); in run_delayed_tree_ref()
2220 int level, int is_data) in btrfs_set_disk_extent_flags() argument
2233 extent_op->level = level; in btrfs_set_disk_extent_flags()
2434 int level; in __btrfs_mod_ref() local
2442 level = btrfs_header_level(buf); in __btrfs_mod_ref()
2444 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state) && level == 0) in __btrfs_mod_ref()
2457 if (level == 0) { in __btrfs_mod_ref()
2490 btrfs_init_tree_ref(&generic_ref, level - 1, ref_root); in __btrfs_mod_ref()
4285 extent_key.offset = ref->level; in alloc_reserved_tree_block()
4320 btrfs_set_tree_block_level(leaf, block_info, ref->level); in alloc_reserved_tree_block()
4420 u64 bytenr, int level, u64 owner) in btrfs_init_new_buffer() argument
4442 btrfs_set_buffer_lockdep_class(root->root_key.objectid, buf, level); in btrfs_init_new_buffer()
4451 btrfs_set_header_level(buf, level); in btrfs_init_new_buffer()
4488 int level, u64 hint, in btrfs_alloc_tree_block() argument
4505 level, root_objectid); in btrfs_alloc_tree_block()
4521 buf = btrfs_init_new_buffer(trans, root, ins.objectid, level, in btrfs_alloc_tree_block()
4549 extent_op->level = level; in btrfs_alloc_tree_block()
4554 btrfs_init_tree_ref(&generic_ref, level, root_objectid); in btrfs_alloc_tree_block()
4581 int level; member
4610 if (path->slots[wc->level] < wc->reada_slot) { in reada_walk_down()
4619 eb = path->nodes[wc->level]; in reada_walk_down()
4622 for (slot = path->slots[wc->level]; slot < nritems; slot++) { in reada_walk_down()
4630 if (slot == path->slots[wc->level]) in reada_walk_down()
4639 wc->level - 1, 1, &refs, in reada_walk_down()
4650 if (wc->level == 1 && in reada_walk_down()
4662 if (wc->level == 1 && in reada_walk_down()
4687 int level = wc->level; in walk_down_proc() local
4688 struct extent_buffer *eb = path->nodes[level]; in walk_down_proc()
4701 ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) || in walk_down_proc()
4702 (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) { in walk_down_proc()
4703 BUG_ON(!path->locks[level]); in walk_down_proc()
4705 eb->start, level, 1, in walk_down_proc()
4706 &wc->refs[level], in walk_down_proc()
4707 &wc->flags[level]); in walk_down_proc()
4711 BUG_ON(wc->refs[level] == 0); in walk_down_proc()
4715 if (wc->refs[level] > 1) in walk_down_proc()
4718 if (path->locks[level] && !wc->keep_locks) { in walk_down_proc()
4719 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
4720 path->locks[level] = 0; in walk_down_proc()
4726 if (!(wc->flags[level] & flag)) { in walk_down_proc()
4727 BUG_ON(!path->locks[level]); in walk_down_proc()
4736 wc->flags[level] |= flag; in walk_down_proc()
4743 if (path->locks[level] && level > 0) { in walk_down_proc()
4744 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
4745 path->locks[level] = 0; in walk_down_proc()
4756 int level) in check_ref_exists() argument
4768 root->root_key.objectid, level, 0); in check_ref_exists()
4803 int level = wc->level; in do_walk_down() local
4808 generation = btrfs_node_ptr_generation(path->nodes[level], in do_walk_down()
4809 path->slots[level]); in do_walk_down()
4821 bytenr = btrfs_node_blockptr(path->nodes[level], path->slots[level]); in do_walk_down()
4822 btrfs_node_key_to_cpu(path->nodes[level], &first_key, in do_walk_down()
4823 path->slots[level]); in do_walk_down()
4832 level - 1); in do_walk_down()
4838 ret = btrfs_lookup_extent_info(trans, fs_info, bytenr, level - 1, 1, in do_walk_down()
4839 &wc->refs[level - 1], in do_walk_down()
4840 &wc->flags[level - 1]); in do_walk_down()
4844 if (unlikely(wc->refs[level - 1] == 0)) { in do_walk_down()
4852 if (wc->refs[level - 1] > 1) { in do_walk_down()
4854 if (level == 1 && in do_walk_down()
4862 btrfs_node_key_to_cpu(path->nodes[level], &key, in do_walk_down()
4863 path->slots[level]); in do_walk_down()
4869 wc->shared_level = level - 1; in do_walk_down()
4872 if (level == 1 && in do_walk_down()
4885 if (reada && level == 1) in do_walk_down()
4887 next = read_tree_block(fs_info, bytenr, generation, level - 1, in do_walk_down()
4899 level--; in do_walk_down()
4900 ASSERT(level == btrfs_header_level(next)); in do_walk_down()
4901 if (level != btrfs_header_level(next)) { in do_walk_down()
4906 path->nodes[level] = next; in do_walk_down()
4907 path->slots[level] = 0; in do_walk_down()
4908 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in do_walk_down()
4909 wc->level = level; in do_walk_down()
4910 if (wc->level == 1) in do_walk_down()
4914 wc->refs[level - 1] = 0; in do_walk_down()
4915 wc->flags[level - 1] = 0; in do_walk_down()
4917 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) { in do_walk_down()
4918 parent = path->nodes[level]->start; in do_walk_down()
4921 btrfs_header_owner(path->nodes[level])); in do_walk_down()
4923 btrfs_header_owner(path->nodes[level])) { in do_walk_down()
4940 level - 1); in do_walk_down()
4957 generation, level - 1); in do_walk_down()
4971 wc->drop_level = level; in do_walk_down()
4972 find_next_key(path, level, &wc->drop_progress); in do_walk_down()
4976 btrfs_init_tree_ref(&ref, level - 1, root->root_key.objectid); in do_walk_down()
5011 int level = wc->level; in walk_up_proc() local
5012 struct extent_buffer *eb = path->nodes[level]; in walk_up_proc()
5016 BUG_ON(wc->shared_level < level); in walk_up_proc()
5017 if (level < wc->shared_level) in walk_up_proc()
5020 ret = find_next_key(path, level + 1, &wc->update_progress); in walk_up_proc()
5026 path->slots[level] = 0; in walk_up_proc()
5033 if (!path->locks[level]) { in walk_up_proc()
5034 BUG_ON(level == 0); in walk_up_proc()
5037 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in walk_up_proc()
5040 eb->start, level, 1, in walk_up_proc()
5041 &wc->refs[level], in walk_up_proc()
5042 &wc->flags[level]); in walk_up_proc()
5044 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
5045 path->locks[level] = 0; in walk_up_proc()
5048 BUG_ON(wc->refs[level] == 0); in walk_up_proc()
5049 if (wc->refs[level] == 1) { in walk_up_proc()
5050 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
5051 path->locks[level] = 0; in walk_up_proc()
5058 BUG_ON(wc->refs[level] > 1 && !path->locks[level]); in walk_up_proc()
5060 if (wc->refs[level] == 1) { in walk_up_proc()
5061 if (level == 0) { in walk_up_proc()
5062 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5077 if (!path->locks[level] && in walk_up_proc()
5081 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in walk_up_proc()
5087 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5092 if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5093 parent = path->nodes[level + 1]->start; in walk_up_proc()
5095 btrfs_header_owner(path->nodes[level + 1])) in walk_up_proc()
5099 btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1); in walk_up_proc()
5101 wc->refs[level] = 0; in walk_up_proc()
5102 wc->flags[level] = 0; in walk_up_proc()
5116 int level = wc->level; in walk_down_tree() local
5120 while (level >= 0) { in walk_down_tree()
5125 if (level == 0) in walk_down_tree()
5128 if (path->slots[level] >= in walk_down_tree()
5129 btrfs_header_nritems(path->nodes[level])) in walk_down_tree()
5134 path->slots[level]++; in walk_down_tree()
5138 level = wc->level; in walk_down_tree()
5148 int level = wc->level; in walk_up_tree() local
5151 path->slots[level] = btrfs_header_nritems(path->nodes[level]); in walk_up_tree()
5152 while (level < max_level && path->nodes[level]) { in walk_up_tree()
5153 wc->level = level; in walk_up_tree()
5154 if (path->slots[level] + 1 < in walk_up_tree()
5155 btrfs_header_nritems(path->nodes[level])) { in walk_up_tree()
5156 path->slots[level]++; in walk_up_tree()
5165 if (path->locks[level]) { in walk_up_tree()
5166 btrfs_tree_unlock_rw(path->nodes[level], in walk_up_tree()
5167 path->locks[level]); in walk_up_tree()
5168 path->locks[level] = 0; in walk_up_tree()
5170 free_extent_buffer(path->nodes[level]); in walk_up_tree()
5171 path->nodes[level] = NULL; in walk_up_tree()
5172 level++; in walk_up_tree()
5204 int level; in btrfs_drop_snapshot() local
5245 level = btrfs_header_level(root->node); in btrfs_drop_snapshot()
5246 path->nodes[level] = btrfs_lock_root_node(root); in btrfs_drop_snapshot()
5247 btrfs_set_lock_blocking_write(path->nodes[level]); in btrfs_drop_snapshot()
5248 path->slots[level] = 0; in btrfs_drop_snapshot()
5249 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in btrfs_drop_snapshot()
5257 level = root_item->drop_level; in btrfs_drop_snapshot()
5258 BUG_ON(level == 0); in btrfs_drop_snapshot()
5259 path->lowest_level = level; in btrfs_drop_snapshot()
5274 level = btrfs_header_level(root->node); in btrfs_drop_snapshot()
5276 btrfs_tree_lock(path->nodes[level]); in btrfs_drop_snapshot()
5277 btrfs_set_lock_blocking_write(path->nodes[level]); in btrfs_drop_snapshot()
5278 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in btrfs_drop_snapshot()
5281 path->nodes[level]->start, in btrfs_drop_snapshot()
5282 level, 1, &wc->refs[level], in btrfs_drop_snapshot()
5283 &wc->flags[level]); in btrfs_drop_snapshot()
5288 BUG_ON(wc->refs[level] == 0); in btrfs_drop_snapshot()
5290 if (level == root_item->drop_level) in btrfs_drop_snapshot()
5293 btrfs_tree_unlock(path->nodes[level]); in btrfs_drop_snapshot()
5294 path->locks[level] = 0; in btrfs_drop_snapshot()
5295 WARN_ON(wc->refs[level] != 1); in btrfs_drop_snapshot()
5296 level--; in btrfs_drop_snapshot()
5301 wc->level = level; in btrfs_drop_snapshot()
5328 wc->drop_level = wc->level; in btrfs_drop_snapshot()
5337 BUG_ON(wc->level == 0); in btrfs_drop_snapshot()
5437 int level; in btrfs_drop_subtree() local
5461 level = btrfs_header_level(node); in btrfs_drop_subtree()
5462 path->nodes[level] = node; in btrfs_drop_subtree()
5463 path->slots[level] = 0; in btrfs_drop_subtree()
5464 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in btrfs_drop_subtree()
5468 wc->level = level; in btrfs_drop_subtree()