Lines Matching refs:level
84 int level, struct btrfs_key *ins);
88 static int find_next_key(struct btrfs_path *path, int level,
1500 static int find_next_key(struct btrfs_path *path, int level, in find_next_key() argument
1504 for (; level < BTRFS_MAX_LEVEL; level++) { in find_next_key()
1505 if (!path->nodes[level]) in find_next_key()
1507 if (path->slots[level] + 1 >= in find_next_key()
1508 btrfs_header_nritems(path->nodes[level])) in find_next_key()
1510 if (level == 0) in find_next_key()
1511 btrfs_item_key_to_cpu(path->nodes[level], key, in find_next_key()
1512 path->slots[level] + 1); in find_next_key()
1514 btrfs_node_key_to_cpu(path->nodes[level], key, in find_next_key()
1515 path->slots[level] + 1); in find_next_key()
2260 key.offset = extent_op->level; in run_delayed_extent_op()
2348 ins.offset = ref->level; in run_delayed_tree_ref()
2368 ref->level, &ins); in run_delayed_tree_ref()
2372 ref->level, 0, 1, in run_delayed_tree_ref()
2377 ref->level, 0, 1, extent_op); in run_delayed_tree_ref()
3020 int level, int is_data) in btrfs_set_disk_extent_flags() argument
3033 extent_op->level = level; in btrfs_set_disk_extent_flags()
3224 int level; in __btrfs_mod_ref() local
3235 level = btrfs_header_level(buf); in __btrfs_mod_ref()
3237 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state) && level == 0) in __btrfs_mod_ref()
3251 if (level == 0) { in __btrfs_mod_ref()
3275 parent, ref_root, level - 1, 0); in __btrfs_mod_ref()
8112 int level, struct btrfs_key *ins) in alloc_reserved_tree_block() argument
8160 btrfs_set_tree_block_level(leaf, block_info, level); in alloc_reserved_tree_block()
8257 u64 bytenr, int level) in btrfs_init_new_buffer() argument
8266 btrfs_set_buffer_lockdep_class(root->root_key.objectid, buf, level); in btrfs_init_new_buffer()
8364 struct btrfs_disk_key *key, int level, in btrfs_alloc_tree_block() argument
8380 level); in btrfs_alloc_tree_block()
8396 buf = btrfs_init_new_buffer(trans, root, ins.objectid, level); in btrfs_alloc_tree_block()
8423 extent_op->level = level; in btrfs_alloc_tree_block()
8427 parent, root_objectid, level, in btrfs_alloc_tree_block()
8451 int level; member
8479 if (path->slots[wc->level] < wc->reada_slot) { in reada_walk_down()
8488 eb = path->nodes[wc->level]; in reada_walk_down()
8491 for (slot = path->slots[wc->level]; slot < nritems; slot++) { in reada_walk_down()
8499 if (slot == path->slots[wc->level]) in reada_walk_down()
8508 wc->level - 1, 1, &refs, in reada_walk_down()
8519 if (wc->level == 1 && in reada_walk_down()
8531 if (wc->level == 1 && in reada_walk_down()
8600 int level = 0; in adjust_slots_upwards() local
8607 while (level <= root_level) { in adjust_slots_upwards()
8608 eb = path->nodes[level]; in adjust_slots_upwards()
8610 path->slots[level]++; in adjust_slots_upwards()
8611 slot = path->slots[level]; in adjust_slots_upwards()
8612 if (slot >= nr || level == 0) { in adjust_slots_upwards()
8618 if (level != root_level) { in adjust_slots_upwards()
8619 btrfs_tree_unlock_rw(eb, path->locks[level]); in adjust_slots_upwards()
8620 path->locks[level] = 0; in adjust_slots_upwards()
8623 path->nodes[level] = NULL; in adjust_slots_upwards()
8624 path->slots[level] = 0; in adjust_slots_upwards()
8635 level++; in adjust_slots_upwards()
8655 int level; in account_shared_subtree() local
8694 level = root_level; in account_shared_subtree()
8695 while (level >= 0) { in account_shared_subtree()
8696 if (path->nodes[level] == NULL) { in account_shared_subtree()
8703 eb = path->nodes[level + 1]; in account_shared_subtree()
8704 parent_slot = path->slots[level + 1]; in account_shared_subtree()
8718 path->nodes[level] = eb; in account_shared_subtree()
8719 path->slots[level] = 0; in account_shared_subtree()
8723 path->locks[level] = BTRFS_READ_LOCK_BLOCKING; in account_shared_subtree()
8732 if (level == 0) { in account_shared_subtree()
8733 ret = account_leaf_items(trans, root, path->nodes[level]); in account_shared_subtree()
8746 level--; in account_shared_subtree()
8769 int level = wc->level; in walk_down_proc() local
8770 struct extent_buffer *eb = path->nodes[level]; in walk_down_proc()
8783 ((wc->stage == DROP_REFERENCE && wc->refs[level] != 1) || in walk_down_proc()
8784 (wc->stage == UPDATE_BACKREF && !(wc->flags[level] & flag)))) { in walk_down_proc()
8785 BUG_ON(!path->locks[level]); in walk_down_proc()
8787 eb->start, level, 1, in walk_down_proc()
8788 &wc->refs[level], in walk_down_proc()
8789 &wc->flags[level]); in walk_down_proc()
8793 BUG_ON(wc->refs[level] == 0); in walk_down_proc()
8797 if (wc->refs[level] > 1) in walk_down_proc()
8800 if (path->locks[level] && !wc->keep_locks) { in walk_down_proc()
8801 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
8802 path->locks[level] = 0; in walk_down_proc()
8808 if (!(wc->flags[level] & flag)) { in walk_down_proc()
8809 BUG_ON(!path->locks[level]); in walk_down_proc()
8818 wc->flags[level] |= flag; in walk_down_proc()
8825 if (path->locks[level] && level > 0) { in walk_down_proc()
8826 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
8827 path->locks[level] = 0; in walk_down_proc()
8856 int level = wc->level; in do_walk_down() local
8861 generation = btrfs_node_ptr_generation(path->nodes[level], in do_walk_down()
8862 path->slots[level]); in do_walk_down()
8874 bytenr = btrfs_node_blockptr(path->nodes[level], path->slots[level]); in do_walk_down()
8884 level - 1); in do_walk_down()
8890 ret = btrfs_lookup_extent_info(trans, root, bytenr, level - 1, 1, in do_walk_down()
8891 &wc->refs[level - 1], in do_walk_down()
8892 &wc->flags[level - 1]); in do_walk_down()
8896 if (unlikely(wc->refs[level - 1] == 0)) { in do_walk_down()
8904 if (wc->refs[level - 1] > 1) { in do_walk_down()
8906 if (level == 1 && in do_walk_down()
8914 btrfs_node_key_to_cpu(path->nodes[level], &key, in do_walk_down()
8915 path->slots[level]); in do_walk_down()
8921 wc->shared_level = level - 1; in do_walk_down()
8924 if (level == 1 && in do_walk_down()
8937 if (reada && level == 1) in do_walk_down()
8950 level--; in do_walk_down()
8951 ASSERT(level == btrfs_header_level(next)); in do_walk_down()
8952 if (level != btrfs_header_level(next)) { in do_walk_down()
8957 path->nodes[level] = next; in do_walk_down()
8958 path->slots[level] = 0; in do_walk_down()
8959 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in do_walk_down()
8960 wc->level = level; in do_walk_down()
8961 if (wc->level == 1) in do_walk_down()
8965 wc->refs[level - 1] = 0; in do_walk_down()
8966 wc->flags[level - 1] = 0; in do_walk_down()
8968 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) { in do_walk_down()
8969 parent = path->nodes[level]->start; in do_walk_down()
8972 btrfs_header_owner(path->nodes[level])); in do_walk_down()
8974 btrfs_header_owner(path->nodes[level])) { in do_walk_down()
8985 generation, level - 1); in do_walk_down()
8993 root->root_key.objectid, level - 1, 0); in do_walk_down()
9026 int level = wc->level; in walk_up_proc() local
9027 struct extent_buffer *eb = path->nodes[level]; in walk_up_proc()
9031 BUG_ON(wc->shared_level < level); in walk_up_proc()
9032 if (level < wc->shared_level) in walk_up_proc()
9035 ret = find_next_key(path, level + 1, &wc->update_progress); in walk_up_proc()
9041 path->slots[level] = 0; in walk_up_proc()
9048 if (!path->locks[level]) { in walk_up_proc()
9049 BUG_ON(level == 0); in walk_up_proc()
9052 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in walk_up_proc()
9055 eb->start, level, 1, in walk_up_proc()
9056 &wc->refs[level], in walk_up_proc()
9057 &wc->flags[level]); in walk_up_proc()
9059 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
9060 path->locks[level] = 0; in walk_up_proc()
9063 BUG_ON(wc->refs[level] == 0); in walk_up_proc()
9064 if (wc->refs[level] == 1) { in walk_up_proc()
9065 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
9066 path->locks[level] = 0; in walk_up_proc()
9073 BUG_ON(wc->refs[level] > 1 && !path->locks[level]); in walk_up_proc()
9075 if (wc->refs[level] == 1) { in walk_up_proc()
9076 if (level == 0) { in walk_up_proc()
9077 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
9090 if (!path->locks[level] && in walk_up_proc()
9094 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in walk_up_proc()
9100 if (wc->flags[level] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
9106 if (wc->flags[level + 1] & BTRFS_BLOCK_FLAG_FULL_BACKREF) in walk_up_proc()
9107 parent = path->nodes[level + 1]->start; in walk_up_proc()
9110 btrfs_header_owner(path->nodes[level + 1])); in walk_up_proc()
9113 btrfs_free_tree_block(trans, root, eb, parent, wc->refs[level] == 1); in walk_up_proc()
9115 wc->refs[level] = 0; in walk_up_proc()
9116 wc->flags[level] = 0; in walk_up_proc()
9125 int level = wc->level; in walk_down_tree() local
9129 while (level >= 0) { in walk_down_tree()
9134 if (level == 0) in walk_down_tree()
9137 if (path->slots[level] >= in walk_down_tree()
9138 btrfs_header_nritems(path->nodes[level])) in walk_down_tree()
9143 path->slots[level]++; in walk_down_tree()
9147 level = wc->level; in walk_down_tree()
9157 int level = wc->level; in walk_up_tree() local
9160 path->slots[level] = btrfs_header_nritems(path->nodes[level]); in walk_up_tree()
9161 while (level < max_level && path->nodes[level]) { in walk_up_tree()
9162 wc->level = level; in walk_up_tree()
9163 if (path->slots[level] + 1 < in walk_up_tree()
9164 btrfs_header_nritems(path->nodes[level])) { in walk_up_tree()
9165 path->slots[level]++; in walk_up_tree()
9172 if (path->locks[level]) { in walk_up_tree()
9173 btrfs_tree_unlock_rw(path->nodes[level], in walk_up_tree()
9174 path->locks[level]); in walk_up_tree()
9175 path->locks[level] = 0; in walk_up_tree()
9177 free_extent_buffer(path->nodes[level]); in walk_up_tree()
9178 path->nodes[level] = NULL; in walk_up_tree()
9179 level++; in walk_up_tree()
9211 int level; in btrfs_drop_snapshot() local
9239 level = btrfs_header_level(root->node); in btrfs_drop_snapshot()
9240 path->nodes[level] = btrfs_lock_root_node(root); in btrfs_drop_snapshot()
9241 btrfs_set_lock_blocking(path->nodes[level]); in btrfs_drop_snapshot()
9242 path->slots[level] = 0; in btrfs_drop_snapshot()
9243 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in btrfs_drop_snapshot()
9251 level = root_item->drop_level; in btrfs_drop_snapshot()
9252 BUG_ON(level == 0); in btrfs_drop_snapshot()
9253 path->lowest_level = level; in btrfs_drop_snapshot()
9268 level = btrfs_header_level(root->node); in btrfs_drop_snapshot()
9270 btrfs_tree_lock(path->nodes[level]); in btrfs_drop_snapshot()
9271 btrfs_set_lock_blocking(path->nodes[level]); in btrfs_drop_snapshot()
9272 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in btrfs_drop_snapshot()
9275 path->nodes[level]->start, in btrfs_drop_snapshot()
9276 level, 1, &wc->refs[level], in btrfs_drop_snapshot()
9277 &wc->flags[level]); in btrfs_drop_snapshot()
9282 BUG_ON(wc->refs[level] == 0); in btrfs_drop_snapshot()
9284 if (level == root_item->drop_level) in btrfs_drop_snapshot()
9287 btrfs_tree_unlock(path->nodes[level]); in btrfs_drop_snapshot()
9288 path->locks[level] = 0; in btrfs_drop_snapshot()
9289 WARN_ON(wc->refs[level] != 1); in btrfs_drop_snapshot()
9290 level--; in btrfs_drop_snapshot()
9294 wc->level = level; in btrfs_drop_snapshot()
9322 level = wc->level; in btrfs_drop_snapshot()
9323 btrfs_node_key(path->nodes[level], in btrfs_drop_snapshot()
9325 path->slots[level]); in btrfs_drop_snapshot()
9326 root_item->drop_level = level; in btrfs_drop_snapshot()
9329 BUG_ON(wc->level == 0); in btrfs_drop_snapshot()
9428 int level; in btrfs_drop_subtree() local
9452 level = btrfs_header_level(node); in btrfs_drop_subtree()
9453 path->nodes[level] = node; in btrfs_drop_subtree()
9454 path->slots[level] = 0; in btrfs_drop_subtree()
9455 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in btrfs_drop_subtree()
9459 wc->level = level; in btrfs_drop_subtree()