Lines Matching refs:level
98 int level, struct btrfs_key *ins);
102 static int find_next_key(struct btrfs_path *path, int level,
1496 static int find_next_key(struct btrfs_path *path, int level, in find_next_key() argument
1500 for (; level < BTRFS_MAX_LEVEL; level++) { in find_next_key()
1501 if (!path->nodes[level]) in find_next_key()
1503 if (path->slots[level] + 1 >= in find_next_key()
1504 btrfs_header_nritems(path->nodes[level])) in find_next_key()
1506 if (level == 0) in find_next_key()
1507 btrfs_item_key_to_cpu(path->nodes[level], key, in find_next_key()
1508 path->slots[level] + 1); in find_next_key()
1510 btrfs_node_key_to_cpu(path->nodes[level], key, in find_next_key()
1511 path->slots[level] + 1); in find_next_key()
2250 key.offset = extent_op->level; in run_delayed_extent_op()
2338 ins.offset = ref->level; in run_delayed_tree_ref()
2352 ref->level, &ins); in run_delayed_tree_ref()
2356 ref->level, 0, 1, in run_delayed_tree_ref()
2361 ref->level, 0, 1, extent_op); in run_delayed_tree_ref()
2981 int level, int is_data) in btrfs_set_disk_extent_flags() argument
2994 extent_op->level = level; in btrfs_set_disk_extent_flags()
3185 int level; in __btrfs_mod_ref() local
3196 level = btrfs_header_level(buf); in __btrfs_mod_ref()
3198 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state) && level == 0) in __btrfs_mod_ref()
3212 if (level == 0) { in __btrfs_mod_ref()
3236 parent, ref_root, level - 1, 0); in __btrfs_mod_ref()
7692 int level, struct btrfs_key *ins) in alloc_reserved_tree_block() argument
7740 btrfs_set_tree_block_level(leaf, block_info, level); in alloc_reserved_tree_block()
7826 u64 bytenr, int level) in btrfs_init_new_buffer() argument
7834 btrfs_set_buffer_lockdep_class(root->root_key.objectid, buf, level); in btrfs_init_new_buffer()
7932 struct btrfs_disk_key *key, int level, in btrfs_alloc_tree_block() argument
7947 level); in btrfs_alloc_tree_block()
7962 buf = btrfs_init_new_buffer(trans, root, ins.objectid, level); in btrfs_alloc_tree_block()
7992 extent_op->level = level; in btrfs_alloc_tree_block()
7996 parent, root_objectid, level, in btrfs_alloc_tree_block()
8020 int level; member
8049 if (path->slots[wc->level] < wc->reada_slot) { in reada_walk_down()
8058 eb = path->nodes[wc->level]; in reada_walk_down()
8062 for (slot = path->slots[wc->level]; slot < nritems; slot++) { in reada_walk_down()
8070 if (slot == path->slots[wc->level]) in reada_walk_down()
8079 wc->level - 1, 1, &refs, in reada_walk_down()
8090 if (wc->level == 1 && in reada_walk_down()
8102 if (wc->level == 1 && in reada_walk_down()
8198 int level = 0; in adjust_slots_upwards() local
8205 while (level <= root_level) { in adjust_slots_upwards()
8206 eb = path->nodes[level]; in adjust_slots_upwards()
8208 path->slots[level]++; in adjust_slots_upwards()
8209 slot = path->slots[level]; in adjust_slots_upwards()
8210 if (slot >= nr || level == 0) { in adjust_slots_upwards()
8216 if (level != root_level) { in adjust_slots_upwards()
8217 btrfs_tree_unlock_rw(eb, path->locks[level]); in adjust_slots_upwards()
8218 path->locks[level] = 0; in adjust_slots_upwards()
8221 path->nodes[level] = NULL; in adjust_slots_upwards()
8222 path->slots[level] = 0; in adjust_slots_upwards()
8233 level++; in adjust_slots_upwards()
8253 int level; in account_shared_subtree() local
8292 level = root_level; in account_shared_subtree()
8293 while (level >= 0) { in account_shared_subtree()
8294 if (path->nodes[level] == NULL) { in account_shared_subtree()
8301 eb = path->nodes[level + 1]; in account_shared_subtree()
8302 parent_slot = path->slots[level + 1]; in account_shared_subtree()
8316 path->nodes[level] = eb; in account_shared_subtree()
8317 path->slots[level] = 0; in account_shared_subtree()
8321 path->locks[level] = BTRFS_READ_LOCK_BLOCKING; in account_shared_subtree()
8329 if (level == 0) { in account_shared_subtree()
8330 ret = account_leaf_items(trans, root, path->nodes[level]); in account_shared_subtree()
8343 level--; in account_shared_subtree()
8366 int level = wc->level; in walk_down_proc() local
8367 struct extent_buffer *eb = path->nodes[level]; in walk_down_proc()
8380 ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) || in walk_down_proc()
8381 (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) { in walk_down_proc()
8382 BUG_ON(!path->locks[level]); in walk_down_proc()
8384 eb->start, level, 1, in walk_down_proc()
8385 &wc->refs[level], in walk_down_proc()
8386 &wc->flags[level]); in walk_down_proc()
8390 BUG_ON(wc->refs[level] == 0); in walk_down_proc()
8394 if (wc->refs[level] > 1) in walk_down_proc()
8397 if (path->locks[level] && !wc->keep_locks) { in walk_down_proc()
8398 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
8399 path->locks[level] = 0; in walk_down_proc()
8405 if (!(wc->flags[level] & flag)) { in walk_down_proc()
8406 BUG_ON(!path->locks[level]); in walk_down_proc()
8415 wc->flags[level] |= flag; in walk_down_proc()
8422 if (path->locks[level] && level > 0) { in walk_down_proc()
8423 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
8424 path->locks[level] = 0; in walk_down_proc()
8453 int level = wc->level; in do_walk_down() local
8458 generation = btrfs_node_ptr_generation(path->nodes[level], in do_walk_down()
8459 path->slots[level]); in do_walk_down()
8471 bytenr = btrfs_node_blockptr(path->nodes[level], path->slots[level]); in do_walk_down()
8480 level - 1); in do_walk_down()
8486 ret = btrfs_lookup_extent_info(trans, root, bytenr, level - 1, 1, in do_walk_down()
8487 &wc->refs[level - 1], in do_walk_down()
8488 &wc->flags[level - 1]); in do_walk_down()
8494 if (unlikely(wc->refs[level - 1] == 0)) { in do_walk_down()
8501 if (wc->refs[level - 1] > 1) { in do_walk_down()
8503 if (level == 1 && in do_walk_down()
8511 btrfs_node_key_to_cpu(path->nodes[level], &key, in do_walk_down()
8512 path->slots[level]); in do_walk_down()
8518 wc->shared_level = level - 1; in do_walk_down()
8521 if (level == 1 && in do_walk_down()
8534 if (reada && level == 1) in do_walk_down()
8547 level--; in do_walk_down()
8548 BUG_ON(level != btrfs_header_level(next)); in do_walk_down()
8549 path->nodes[level] = next; in do_walk_down()
8550 path->slots[level] = 0; in do_walk_down()
8551 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in do_walk_down()
8552 wc->level = level; in do_walk_down()
8553 if (wc->level == 1) in do_walk_down()
8557 wc->refs[level - 1] = 0; in do_walk_down()
8558 wc->flags[level - 1] = 0; in do_walk_down()
8560 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) { in do_walk_down()
8561 parent = path->nodes[level]->start; in do_walk_down()
8564 btrfs_header_owner(path->nodes[level])); in do_walk_down()
8570 generation, level - 1); in do_walk_down()
8580 root->root_key.objectid, level - 1, 0); in do_walk_down()
8607 int level = wc->level; in walk_up_proc() local
8608 struct extent_buffer *eb = path->nodes[level]; in walk_up_proc()
8612 BUG_ON(wc->shared_level < level); in walk_up_proc()
8613 if (level < wc->shared_level) in walk_up_proc()
8616 ret = find_next_key(path, level + 1, &wc->update_progress); in walk_up_proc()
8622 path->slots[level] = 0; in walk_up_proc()
8629 if (!path->locks[level]) { in walk_up_proc()
8630 BUG_ON(level == 0); in walk_up_proc()
8633 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in walk_up_proc()
8636 eb->start, level, 1, in walk_up_proc()
8637 &wc->refs[level], in walk_up_proc()
8638 &wc->flags[level]); in walk_up_proc()
8640 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
8641 path->locks[level] = 0; in walk_up_proc()
8644 BUG_ON(wc->refs[level] == 0); in walk_up_proc()
8645 if (wc->refs[level] == 1) { in walk_up_proc()
8646 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
8647 path->locks[level] = 0; in walk_up_proc()
8654 BUG_ON(wc->refs[level] > 1 && !path->locks[level]); in walk_up_proc()
8656 if (wc->refs[level] == 1) { in walk_up_proc()
8657 if (level == 0) { in walk_up_proc()
8658 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
8673 if (!path->locks[level] && in walk_up_proc()
8677 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in walk_up_proc()
8683 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
8689 if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
8690 parent = path->nodes[level + 1]->start; in walk_up_proc()
8693 btrfs_header_owner(path->nodes[level + 1])); in walk_up_proc()
8696 btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1); in walk_up_proc()
8698 wc->refs[level] = 0; in walk_up_proc()
8699 wc->flags[level] = 0; in walk_up_proc()
8708 int level = wc->level; in walk_down_tree() local
8712 while (level >= 0) { in walk_down_tree()
8717 if (level == 0) in walk_down_tree()
8720 if (path->slots[level] >= in walk_down_tree()
8721 btrfs_header_nritems(path->nodes[level])) in walk_down_tree()
8726 path->slots[level]++; in walk_down_tree()
8730 level = wc->level; in walk_down_tree()
8740 int level = wc->level; in walk_up_tree() local
8743 path->slots[level] = btrfs_header_nritems(path->nodes[level]); in walk_up_tree()
8744 while (level < max_level && path->nodes[level]) { in walk_up_tree()
8745 wc->level = level; in walk_up_tree()
8746 if (path->slots[level] + 1 < in walk_up_tree()
8747 btrfs_header_nritems(path->nodes[level])) { in walk_up_tree()
8748 path->slots[level]++; in walk_up_tree()
8755 if (path->locks[level]) { in walk_up_tree()
8756 btrfs_tree_unlock_rw(path->nodes[level], in walk_up_tree()
8757 path->locks[level]); in walk_up_tree()
8758 path->locks[level] = 0; in walk_up_tree()
8760 free_extent_buffer(path->nodes[level]); in walk_up_tree()
8761 path->nodes[level] = NULL; in walk_up_tree()
8762 level++; in walk_up_tree()
8793 int level; in btrfs_drop_snapshot() local
8821 level = btrfs_header_level(root->node); in btrfs_drop_snapshot()
8822 path->nodes[level] = btrfs_lock_root_node(root); in btrfs_drop_snapshot()
8823 btrfs_set_lock_blocking(path->nodes[level]); in btrfs_drop_snapshot()
8824 path->slots[level] = 0; in btrfs_drop_snapshot()
8825 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in btrfs_drop_snapshot()
8833 level = root_item->drop_level; in btrfs_drop_snapshot()
8834 BUG_ON(level == 0); in btrfs_drop_snapshot()
8835 path->lowest_level = level; in btrfs_drop_snapshot()
8850 level = btrfs_header_level(root->node); in btrfs_drop_snapshot()
8852 btrfs_tree_lock(path->nodes[level]); in btrfs_drop_snapshot()
8853 btrfs_set_lock_blocking(path->nodes[level]); in btrfs_drop_snapshot()
8854 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in btrfs_drop_snapshot()
8857 path->nodes[level]->start, in btrfs_drop_snapshot()
8858 level, 1, &wc->refs[level], in btrfs_drop_snapshot()
8859 &wc->flags[level]); in btrfs_drop_snapshot()
8864 BUG_ON(wc->refs[level] == 0); in btrfs_drop_snapshot()
8866 if (level == root_item->drop_level) in btrfs_drop_snapshot()
8869 btrfs_tree_unlock(path->nodes[level]); in btrfs_drop_snapshot()
8870 path->locks[level] = 0; in btrfs_drop_snapshot()
8871 WARN_ON(wc->refs[level] != 1); in btrfs_drop_snapshot()
8872 level--; in btrfs_drop_snapshot()
8876 wc->level = level; in btrfs_drop_snapshot()
8904 level = wc->level; in btrfs_drop_snapshot()
8905 btrfs_node_key(path->nodes[level], in btrfs_drop_snapshot()
8907 path->slots[level]); in btrfs_drop_snapshot()
8908 root_item->drop_level = level; in btrfs_drop_snapshot()
8911 BUG_ON(wc->level == 0); in btrfs_drop_snapshot()
9008 int level; in btrfs_drop_subtree() local
9032 level = btrfs_header_level(node); in btrfs_drop_subtree()
9033 path->nodes[level] = node; in btrfs_drop_subtree()
9034 path->slots[level] = 0; in btrfs_drop_subtree()
9035 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in btrfs_drop_subtree()
9039 wc->level = level; in btrfs_drop_subtree()