Lines Matching refs:level
61 static int find_next_key(const struct btrfs_path *path, int level,
725 static int find_next_key(const struct btrfs_path *path, int level, in find_next_key() argument
729 for (; level < BTRFS_MAX_LEVEL; level++) { in find_next_key()
730 if (!path->nodes[level]) in find_next_key()
732 if (path->slots[level] + 1 >= in find_next_key()
733 btrfs_header_nritems(path->nodes[level])) in find_next_key()
735 if (level == 0) in find_next_key()
736 btrfs_item_key_to_cpu(path->nodes[level], key, in find_next_key()
737 path->slots[level] + 1); in find_next_key()
739 btrfs_node_key_to_cpu(path->nodes[level], key, in find_next_key()
740 path->slots[level] + 1); in find_next_key()
1652 key.offset = head->level; in run_delayed_extent_op()
1687 head->bytenr, head->num_bytes, head->level); in run_delayed_extent_op()
2471 int level; in __btrfs_mod_ref() local
2479 level = btrfs_header_level(buf); in __btrfs_mod_ref()
2481 if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state) && level == 0) in __btrfs_mod_ref()
2500 if (level == 0) { in __btrfs_mod_ref()
2530 btrfs_init_tree_ref(&ref, level - 1, in __btrfs_mod_ref()
4894 int level = btrfs_delayed_ref_owner(node); in alloc_reserved_tree_block() local
4900 extent_key.offset = level; in alloc_reserved_tree_block()
4933 btrfs_set_tree_block_level(leaf, block_info, level); in alloc_reserved_tree_block()
5053 u64 bytenr, int level, u64 owner, in btrfs_init_new_buffer() argument
5060 buf = btrfs_find_create_tree_block(fs_info, bytenr, owner, level); in btrfs_init_new_buffer()
5091 btrfs_set_buffer_lockdep_class(lockdep_owner, buf, level); in btrfs_init_new_buffer()
5101 btrfs_set_header_level(buf, level); in btrfs_init_new_buffer()
5139 int level, u64 hint, in btrfs_alloc_tree_block() argument
5157 level, root_objectid, nest); in btrfs_alloc_tree_block()
5173 buf = btrfs_init_new_buffer(trans, root, ins.objectid, level, in btrfs_alloc_tree_block()
5217 btrfs_init_tree_ref(&generic_ref, level, btrfs_root_id(root), false); in btrfs_alloc_tree_block()
5244 int level; member
5295 int level = wc->level; in visit_node_for_delete() local
5297 ASSERT(level > 0); in visit_node_for_delete()
5298 ASSERT(wc->refs[level - 1] > 0); in visit_node_for_delete()
5305 if (level == 1 && flags & BTRFS_BLOCK_FLAG_FULL_BACKREF) in visit_node_for_delete()
5314 if (wc->refs[level - 1] == 1) in visit_node_for_delete()
5321 if (level == 1 && flags & BTRFS_BLOCK_FLAG_FULL_BACKREF) in visit_node_for_delete()
5360 if (path->slots[wc->level] < wc->reada_slot) { in reada_walk_down()
5369 eb = path->nodes[wc->level]; in reada_walk_down()
5372 for (slot = path->slots[wc->level]; slot < nritems; slot++) { in reada_walk_down()
5380 if (slot == path->slots[wc->level]) in reada_walk_down()
5389 wc->level - 1, 1, &refs, in reada_walk_down()
5428 int level = wc->level; in walk_down_proc() local
5429 struct extent_buffer *eb = path->nodes[level]; in walk_down_proc()
5441 ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) || in walk_down_proc()
5442 (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) { in walk_down_proc()
5443 ASSERT(path->locks[level]); in walk_down_proc()
5445 eb->start, level, 1, in walk_down_proc()
5446 &wc->refs[level], in walk_down_proc()
5447 &wc->flags[level], in walk_down_proc()
5451 if (unlikely(wc->refs[level] == 0)) { in walk_down_proc()
5459 if (wc->refs[level] > 1) in walk_down_proc()
5462 if (path->locks[level] && !wc->keep_locks) { in walk_down_proc()
5463 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
5464 path->locks[level] = 0; in walk_down_proc()
5470 if (!(wc->flags[level] & flag)) { in walk_down_proc()
5471 ASSERT(path->locks[level]); in walk_down_proc()
5487 wc->flags[level] |= flag; in walk_down_proc()
5494 if (path->locks[level] && level > 0) { in walk_down_proc()
5495 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
5496 path->locks[level] = 0; in walk_down_proc()
5507 int level) in check_ref_exists() argument
5522 btrfs_root_id(root), level, 0); in check_ref_exists()
5578 int level = wc->level; in check_next_block_uptodate() local
5583 generation = btrfs_node_ptr_generation(path->nodes[level], path->slots[level]); in check_next_block_uptodate()
5588 check.level = level - 1; in check_next_block_uptodate()
5592 btrfs_node_key_to_cpu(path->nodes[level], &check.first_key, path->slots[level]); in check_next_block_uptodate()
5595 if (level == 1) in check_next_block_uptodate()
5628 int level = wc->level; in maybe_drop_reference() local
5635 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) { in maybe_drop_reference()
5636 ref.parent = path->nodes[level]->start; in maybe_drop_reference()
5638 ASSERT(btrfs_root_id(root) == btrfs_header_owner(path->nodes[level])); in maybe_drop_reference()
5639 if (btrfs_root_id(root) != btrfs_header_owner(path->nodes[level])) { in maybe_drop_reference()
5653 level - 1); in maybe_drop_reference()
5666 wc->refs[level - 1] > 1) { in maybe_drop_reference()
5667 u64 generation = btrfs_node_ptr_generation(path->nodes[level], in maybe_drop_reference()
5668 path->slots[level]); in maybe_drop_reference()
5670 ret = btrfs_qgroup_trace_subtree(trans, next, generation, level - 1); in maybe_drop_reference()
5684 wc->drop_level = level; in maybe_drop_reference()
5685 find_next_key(path, level, &wc->drop_progress); in maybe_drop_reference()
5687 btrfs_init_tree_ref(&ref, level - 1, 0, false); in maybe_drop_reference()
5714 int level = wc->level; in do_walk_down() local
5717 generation = btrfs_node_ptr_generation(path->nodes[level], in do_walk_down()
5718 path->slots[level]); in do_walk_down()
5730 bytenr = btrfs_node_blockptr(path->nodes[level], path->slots[level]); in do_walk_down()
5733 level - 1); in do_walk_down()
5739 ret = btrfs_lookup_extent_info(trans, fs_info, bytenr, level - 1, 1, in do_walk_down()
5740 &wc->refs[level - 1], in do_walk_down()
5741 &wc->flags[level - 1], in do_walk_down()
5746 if (unlikely(wc->refs[level - 1] == 0)) { in do_walk_down()
5755 if (!visit_node_for_delete(root, wc, path->nodes[level], in do_walk_down()
5756 wc->flags[level - 1], path->slots[level])) in do_walk_down()
5764 if (wc->stage == DROP_REFERENCE && wc->refs[level - 1] > 1) { in do_walk_down()
5766 wc->shared_level = level - 1; in do_walk_down()
5773 level--; in do_walk_down()
5774 ASSERT(level == btrfs_header_level(next)); in do_walk_down()
5775 if (level != btrfs_header_level(next)) { in do_walk_down()
5780 path->nodes[level] = next; in do_walk_down()
5781 path->slots[level] = 0; in do_walk_down()
5782 path->locks[level] = BTRFS_WRITE_LOCK; in do_walk_down()
5783 wc->level = level; in do_walk_down()
5784 if (wc->level == 1) in do_walk_down()
5791 wc->refs[level - 1] = 0; in do_walk_down()
5792 wc->flags[level - 1] = 0; in do_walk_down()
5822 int level = wc->level; in walk_up_proc() local
5823 struct extent_buffer *eb = path->nodes[level]; in walk_up_proc()
5827 ASSERT(wc->shared_level >= level); in walk_up_proc()
5828 if (level < wc->shared_level) in walk_up_proc()
5831 ret = find_next_key(path, level + 1, &wc->update_progress); in walk_up_proc()
5837 path->slots[level] = 0; in walk_up_proc()
5844 if (!path->locks[level]) { in walk_up_proc()
5845 ASSERT(level > 0); in walk_up_proc()
5847 path->locks[level] = BTRFS_WRITE_LOCK; in walk_up_proc()
5850 eb->start, level, 1, in walk_up_proc()
5851 &wc->refs[level], in walk_up_proc()
5852 &wc->flags[level], in walk_up_proc()
5855 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
5856 path->locks[level] = 0; in walk_up_proc()
5859 if (unlikely(wc->refs[level] == 0)) { in walk_up_proc()
5860 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
5865 if (wc->refs[level] == 1) { in walk_up_proc()
5866 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
5867 path->locks[level] = 0; in walk_up_proc()
5874 ASSERT(path->locks[level] || wc->refs[level] == 1); in walk_up_proc()
5876 if (wc->refs[level] == 1) { in walk_up_proc()
5877 if (level == 0) { in walk_up_proc()
5878 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) { in walk_up_proc()
5901 if (!path->locks[level]) { in walk_up_proc()
5903 path->locks[level] = BTRFS_WRITE_LOCK; in walk_up_proc()
5909 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5914 if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
5915 parent = path->nodes[level + 1]->start; in walk_up_proc()
5917 btrfs_header_owner(path->nodes[level + 1])) in walk_up_proc()
5922 wc->refs[level] == 1); in walk_up_proc()
5926 wc->refs[level] = 0; in walk_up_proc()
5927 wc->flags[level] = 0; in walk_up_proc()
5962 int level = wc->level; in walk_down_tree() local
5966 while (level >= 0) { in walk_down_tree()
5971 if (level == 0) in walk_down_tree()
5974 if (path->slots[level] >= in walk_down_tree()
5975 btrfs_header_nritems(path->nodes[level])) in walk_down_tree()
5980 path->slots[level]++; in walk_down_tree()
5984 level = wc->level; in walk_down_tree()
6011 int level = wc->level; in walk_up_tree() local
6014 path->slots[level] = btrfs_header_nritems(path->nodes[level]); in walk_up_tree()
6015 while (level < max_level && path->nodes[level]) { in walk_up_tree()
6016 wc->level = level; in walk_up_tree()
6017 if (path->slots[level] + 1 < in walk_up_tree()
6018 btrfs_header_nritems(path->nodes[level])) { in walk_up_tree()
6019 path->slots[level]++; in walk_up_tree()
6028 if (path->locks[level]) { in walk_up_tree()
6029 btrfs_tree_unlock_rw(path->nodes[level], in walk_up_tree()
6030 path->locks[level]); in walk_up_tree()
6031 path->locks[level] = 0; in walk_up_tree()
6033 free_extent_buffer(path->nodes[level]); in walk_up_tree()
6034 path->nodes[level] = NULL; in walk_up_tree()
6035 level++; in walk_up_tree()
6066 int level; in btrfs_drop_snapshot() local
6114 level = btrfs_header_level(root->node); in btrfs_drop_snapshot()
6115 path->nodes[level] = btrfs_lock_root_node(root); in btrfs_drop_snapshot()
6116 path->slots[level] = 0; in btrfs_drop_snapshot()
6117 path->locks[level] = BTRFS_WRITE_LOCK; in btrfs_drop_snapshot()
6125 level = btrfs_root_drop_level(root_item); in btrfs_drop_snapshot()
6126 BUG_ON(level == 0); in btrfs_drop_snapshot()
6127 path->lowest_level = level; in btrfs_drop_snapshot()
6142 level = btrfs_header_level(root->node); in btrfs_drop_snapshot()
6144 btrfs_tree_lock(path->nodes[level]); in btrfs_drop_snapshot()
6145 path->locks[level] = BTRFS_WRITE_LOCK; in btrfs_drop_snapshot()
6152 path->nodes[level]->start, in btrfs_drop_snapshot()
6153 level, 1, &wc->refs[level], in btrfs_drop_snapshot()
6154 &wc->flags[level], NULL); in btrfs_drop_snapshot()
6158 BUG_ON(wc->refs[level] == 0); in btrfs_drop_snapshot()
6160 if (level == btrfs_root_drop_level(root_item)) in btrfs_drop_snapshot()
6163 btrfs_tree_unlock(path->nodes[level]); in btrfs_drop_snapshot()
6164 path->locks[level] = 0; in btrfs_drop_snapshot()
6165 WARN_ON(wc->refs[level] != 1); in btrfs_drop_snapshot()
6166 level--; in btrfs_drop_snapshot()
6171 wc->level = level; in btrfs_drop_snapshot()
6199 wc->drop_level = wc->level; in btrfs_drop_snapshot()
6208 BUG_ON(wc->level == 0); in btrfs_drop_snapshot()
6336 int level; in btrfs_drop_subtree() local
6357 level = btrfs_header_level(node); in btrfs_drop_subtree()
6358 path->nodes[level] = node; in btrfs_drop_subtree()
6359 path->slots[level] = 0; in btrfs_drop_subtree()
6360 path->locks[level] = BTRFS_WRITE_LOCK; in btrfs_drop_subtree()
6364 wc->level = level; in btrfs_drop_subtree()