Lines Matching refs:level

29 		      *root, struct btrfs_path *path, int level);
41 int level, int slot);
245 int level; in btrfs_copy_root() local
253 level = btrfs_header_level(buf); in btrfs_copy_root()
254 if (level == 0) in btrfs_copy_root()
260 &disk_key, level, buf->start, 0); in btrfs_copy_root()
309 u8 level; member
704 tm->old_root.level = btrfs_header_level(old_root); in tree_mod_log_insert_root()
1055 int level = btrfs_header_level(buf); in update_ref_for_cow() local
1060 new_flags, level, 0); in update_ref_for_cow()
1102 int level, ret; in __btrfs_cow_block() local
1117 level = btrfs_header_level(buf); in __btrfs_cow_block()
1119 if (level == 0) in __btrfs_cow_block()
1133 root->root_key.objectid, &disk_key, level, in __btrfs_cow_block()
1469 btrfs_set_header_level(eb, old_root->level); in get_old_root()
1484 int level; in btrfs_old_root_level() local
1489 level = tm->old_root.level; in btrfs_old_root_level()
1491 level = btrfs_header_level(eb_root); in btrfs_old_root_level()
1495 return level; in btrfs_old_root_level()
1810 int level, int *slot) in bin_search() argument
1812 if (level == 0) in bin_search()
1827 int level, int *slot) in btrfs_bin_search() argument
1829 return bin_search(eb, key, level, slot); in btrfs_bin_search()
1855 int level = btrfs_header_level(parent); in read_node_slot() local
1863 BUG_ON(level == 0); in read_node_slot()
1882 struct btrfs_path *path, int level) in balance_level() argument
1891 int orig_slot = path->slots[level]; in balance_level()
1894 if (level == 0) in balance_level()
1897 mid = path->nodes[level]; in balance_level()
1899 WARN_ON(path->locks[level] != BTRFS_WRITE_LOCK && in balance_level()
1900 path->locks[level] != BTRFS_WRITE_LOCK_BLOCKING); in balance_level()
1905 if (level < BTRFS_MAX_LEVEL - 1) { in balance_level()
1906 parent = path->nodes[level + 1]; in balance_level()
1907 pslot = path->slots[level + 1]; in balance_level()
1943 path->locks[level] = 0; in balance_level()
1944 path->nodes[level] = NULL; in balance_level()
2001 del_ptr(root, path, level + 1, pslot + 1); in balance_level()
2045 del_ptr(root, path, level + 1, pslot); in balance_level()
2065 path->nodes[level] = left; in balance_level()
2066 path->slots[level + 1] -= 1; in balance_level()
2067 path->slots[level] = orig_slot; in balance_level()
2074 path->slots[level] = orig_slot; in balance_level()
2079 btrfs_node_blockptr(path->nodes[level], path->slots[level])) in balance_level()
2087 if (path->nodes[level] != left) in balance_level()
2100 struct btrfs_path *path, int level) in push_nodes_for_insert() argument
2109 int orig_slot = path->slots[level]; in push_nodes_for_insert()
2111 if (level == 0) in push_nodes_for_insert()
2114 mid = path->nodes[level]; in push_nodes_for_insert()
2117 if (level < BTRFS_MAX_LEVEL - 1) { in push_nodes_for_insert()
2118 parent = path->nodes[level + 1]; in push_nodes_for_insert()
2119 pslot = path->slots[level + 1]; in push_nodes_for_insert()
2158 path->nodes[level] = left; in push_nodes_for_insert()
2159 path->slots[level + 1] -= 1; in push_nodes_for_insert()
2160 path->slots[level] = orig_slot; in push_nodes_for_insert()
2166 path->slots[level] = orig_slot; in push_nodes_for_insert()
2212 path->nodes[level] = right; in push_nodes_for_insert()
2213 path->slots[level + 1] += 1; in push_nodes_for_insert()
2214 path->slots[level] = orig_slot - in push_nodes_for_insert()
2236 int level, int slot, u64 objectid) in reada_for_search() argument
2251 if (level != 1) in reada_for_search()
2254 if (!path->nodes[level]) in reada_for_search()
2257 node = path->nodes[level]; in reada_for_search()
2301 struct btrfs_path *path, int level) in reada_for_balance() argument
2311 parent = path->nodes[level + 1]; in reada_for_balance()
2316 slot = path->slots[level + 1]; in reada_for_balance()
2360 static noinline void unlock_up(struct btrfs_path *path, int level, in unlock_up() argument
2365 int skip_level = level; in unlock_up()
2369 for (i = level; i < BTRFS_MAX_LEVEL; i++) { in unlock_up()
2412 noinline void btrfs_unlock_up_safe(struct btrfs_path *path, int level) in btrfs_unlock_up_safe() argument
2419 for (i = level; i < BTRFS_MAX_LEVEL; i++) { in btrfs_unlock_up_safe()
2440 struct extent_buffer **eb_ret, int level, int slot, in read_block_for_search() argument
2486 btrfs_unlock_up_safe(p, level + 1); in read_block_for_search()
2491 reada_for_search(root, p, level, slot, key->objectid); in read_block_for_search()
2523 struct extent_buffer *b, int level, int ins_len, in setup_nodes_for_search() argument
2531 if (*write_lock_level < level + 1) { in setup_nodes_for_search()
2532 *write_lock_level = level + 1; in setup_nodes_for_search()
2538 reada_for_balance(root, p, level); in setup_nodes_for_search()
2539 sret = split_node(trans, root, p, level); in setup_nodes_for_search()
2547 b = p->nodes[level]; in setup_nodes_for_search()
2552 if (*write_lock_level < level + 1) { in setup_nodes_for_search()
2553 *write_lock_level = level + 1; in setup_nodes_for_search()
2559 reada_for_balance(root, p, level); in setup_nodes_for_search()
2560 sret = balance_level(trans, root, p, level); in setup_nodes_for_search()
2567 b = p->nodes[level]; in setup_nodes_for_search()
2584 int level) in key_search_validate() argument
2591 if (level == 0) in key_search_validate()
2603 int level, int *prev_cmp, int *slot) in key_search() argument
2606 *prev_cmp = bin_search(b, key, level, slot); in key_search()
2610 key_search_validate(b, key, level); in key_search()
2672 int level; in btrfs_search_slot() local
2716 level = 0; in btrfs_search_slot()
2726 level = btrfs_header_level(b); in btrfs_search_slot()
2734 level = btrfs_header_level(b); in btrfs_search_slot()
2740 level = btrfs_header_level(b); in btrfs_search_slot()
2741 if (level <= write_lock_level) { in btrfs_search_slot()
2749 level = btrfs_header_level(b); in btrfs_search_slot()
2753 p->nodes[level] = b; in btrfs_search_slot()
2755 p->locks[level] = root_lock; in btrfs_search_slot()
2758 level = btrfs_header_level(b); in btrfs_search_slot()
2777 if (level > write_lock_level || in btrfs_search_slot()
2778 (level + 1 > write_lock_level && in btrfs_search_slot()
2779 level + 1 < BTRFS_MAX_LEVEL && in btrfs_search_slot()
2780 p->nodes[level + 1])) { in btrfs_search_slot()
2781 write_lock_level = level + 1; in btrfs_search_slot()
2788 p->nodes[level + 1], in btrfs_search_slot()
2789 p->slots[level + 1], &b); in btrfs_search_slot()
2796 p->nodes[level] = b; in btrfs_search_slot()
2811 int u = level + 1; in btrfs_search_slot()
2819 ret = key_search(b, key, level, &prev_cmp, &slot); in btrfs_search_slot()
2821 if (level != 0) { in btrfs_search_slot()
2827 p->slots[level] = slot; in btrfs_search_slot()
2828 err = setup_nodes_for_search(trans, root, p, b, level, in btrfs_search_slot()
2836 b = p->nodes[level]; in btrfs_search_slot()
2837 slot = p->slots[level]; in btrfs_search_slot()
2846 write_lock_level < level + 1) { in btrfs_search_slot()
2847 write_lock_level = level + 1; in btrfs_search_slot()
2852 unlock_up(p, level, lowest_unlock, in btrfs_search_slot()
2855 if (level == lowest_level) { in btrfs_search_slot()
2857 p->slots[level]++; in btrfs_search_slot()
2862 &b, level, slot, key, 0); in btrfs_search_slot()
2871 level = btrfs_header_level(b); in btrfs_search_slot()
2872 if (level <= write_lock_level) { in btrfs_search_slot()
2880 p->locks[level] = BTRFS_WRITE_LOCK; in btrfs_search_slot()
2889 p->locks[level] = BTRFS_READ_LOCK; in btrfs_search_slot()
2891 p->nodes[level] = b; in btrfs_search_slot()
2894 p->slots[level] = slot; in btrfs_search_slot()
2915 unlock_up(p, level, lowest_unlock, in btrfs_search_slot()
2951 int level; in btrfs_search_old_slot() local
2966 level = btrfs_header_level(b); in btrfs_search_old_slot()
2967 p->locks[level] = BTRFS_READ_LOCK; in btrfs_search_old_slot()
2970 level = btrfs_header_level(b); in btrfs_search_old_slot()
2971 p->nodes[level] = b; in btrfs_search_old_slot()
2980 btrfs_unlock_up_safe(p, level + 1); in btrfs_search_old_slot()
2987 ret = key_search(b, key, level, &prev_cmp, &slot); in btrfs_search_old_slot()
2989 if (level != 0) { in btrfs_search_old_slot()
2995 p->slots[level] = slot; in btrfs_search_old_slot()
2996 unlock_up(p, level, lowest_unlock, 0, NULL); in btrfs_search_old_slot()
2998 if (level == lowest_level) { in btrfs_search_old_slot()
3000 p->slots[level]++; in btrfs_search_old_slot()
3004 err = read_block_for_search(NULL, root, p, &b, level, in btrfs_search_old_slot()
3013 level = btrfs_header_level(b); in btrfs_search_old_slot()
3026 p->locks[level] = BTRFS_READ_LOCK; in btrfs_search_old_slot()
3027 p->nodes[level] = b; in btrfs_search_old_slot()
3029 p->slots[level] = slot; in btrfs_search_old_slot()
3030 unlock_up(p, level, lowest_unlock, 0, NULL); in btrfs_search_old_slot()
3130 struct btrfs_disk_key *key, int level) in fixup_low_keys() argument
3135 for (i = level; i < BTRFS_MAX_LEVEL; i++) { in fixup_low_keys()
3327 struct btrfs_path *path, int level) in insert_new_root() argument
3335 BUG_ON(path->nodes[level]); in insert_new_root()
3336 BUG_ON(path->nodes[level-1] != root->node); in insert_new_root()
3338 lower = path->nodes[level-1]; in insert_new_root()
3339 if (level == 1) in insert_new_root()
3345 &lower_key, level, root->node->start, 0); in insert_new_root()
3353 btrfs_set_header_level(c, level); in insert_new_root()
3383 path->nodes[level] = c; in insert_new_root()
3384 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in insert_new_root()
3385 path->slots[level] = 0; in insert_new_root()
3399 int slot, int level) in insert_ptr() argument
3405 BUG_ON(!path->nodes[level]); in insert_ptr()
3406 btrfs_assert_tree_locked(path->nodes[level]); in insert_ptr()
3407 lower = path->nodes[level]; in insert_ptr()
3412 if (level) in insert_ptr()
3420 if (level) { in insert_ptr()
3444 struct btrfs_path *path, int level) in split_node() argument
3453 c = path->nodes[level]; in split_node()
3466 ret = insert_new_root(trans, root, path, level + 1); in split_node()
3470 ret = push_nodes_for_insert(trans, root, path, level); in split_node()
3471 c = path->nodes[level]; in split_node()
3484 &disk_key, level, c->start, 0); in split_node()
3520 path->slots[level + 1] + 1, level + 1); in split_node()
3522 if (path->slots[level] >= mid) { in split_node()
3523 path->slots[level] -= mid; in split_node()
3526 path->nodes[level] = split; in split_node()
3527 path->slots[level + 1] += 1; in split_node()
4861 int level, int slot) in del_ptr() argument
4863 struct extent_buffer *parent = path->nodes[level]; in del_ptr()
4869 if (level) in del_ptr()
4877 } else if (level) { in del_ptr()
4893 fixup_low_keys(root->fs_info, path, &disk_key, level + 1); in del_ptr()
5124 int level; in btrfs_search_forward() local
5131 level = btrfs_header_level(cur); in btrfs_search_forward()
5132 WARN_ON(path->nodes[level]); in btrfs_search_forward()
5133 path->nodes[level] = cur; in btrfs_search_forward()
5134 path->locks[level] = BTRFS_READ_LOCK; in btrfs_search_forward()
5142 level = btrfs_header_level(cur); in btrfs_search_forward()
5143 sret = bin_search(cur, min_key, level, &slot); in btrfs_search_forward()
5146 if (level == path->lowest_level) { in btrfs_search_forward()
5150 path->slots[level] = slot; in btrfs_search_forward()
5176 path->slots[level] = slot; in btrfs_search_forward()
5178 sret = btrfs_find_next_key(root, path, min_key, level, in btrfs_search_forward()
5189 path->slots[level] = slot; in btrfs_search_forward()
5190 if (level == path->lowest_level) { in btrfs_search_forward()
5200 path->locks[level - 1] = BTRFS_READ_LOCK; in btrfs_search_forward()
5201 path->nodes[level - 1] = cur; in btrfs_search_forward()
5202 unlock_up(path, level, 1, 0, NULL); in btrfs_search_forward()
5217 int *level, int root_level) in tree_move_down() argument
5219 BUG_ON(*level == 0); in tree_move_down()
5220 path->nodes[*level - 1] = read_node_slot(root, path->nodes[*level], in tree_move_down()
5221 path->slots[*level]); in tree_move_down()
5222 path->slots[*level - 1] = 0; in tree_move_down()
5223 (*level)--; in tree_move_down()
5228 int *level, int root_level) in tree_move_next_or_upnext() argument
5232 nritems = btrfs_header_nritems(path->nodes[*level]); in tree_move_next_or_upnext()
5234 path->slots[*level]++; in tree_move_next_or_upnext()
5236 while (path->slots[*level] >= nritems) { in tree_move_next_or_upnext()
5237 if (*level == root_level) in tree_move_next_or_upnext()
5241 path->slots[*level] = 0; in tree_move_next_or_upnext()
5242 free_extent_buffer(path->nodes[*level]); in tree_move_next_or_upnext()
5243 path->nodes[*level] = NULL; in tree_move_next_or_upnext()
5244 (*level)++; in tree_move_next_or_upnext()
5245 path->slots[*level]++; in tree_move_next_or_upnext()
5247 nritems = btrfs_header_nritems(path->nodes[*level]); in tree_move_next_or_upnext()
5259 int *level, int root_level, in tree_advance() argument
5265 if (*level == 0 || !allow_down) { in tree_advance()
5266 ret = tree_move_next_or_upnext(root, path, level, root_level); in tree_advance()
5268 tree_move_down(root, path, level, root_level); in tree_advance()
5272 if (*level == 0) in tree_advance()
5273 btrfs_item_key_to_cpu(path->nodes[*level], key, in tree_advance()
5274 path->slots[*level]); in tree_advance()
5276 btrfs_node_key_to_cpu(path->nodes[*level], key, in tree_advance()
5277 path->slots[*level]); in tree_advance()
5579 struct btrfs_key *key, int level, u64 min_trans) in btrfs_find_next_key() argument
5585 while (level < BTRFS_MAX_LEVEL) { in btrfs_find_next_key()
5586 if (!path->nodes[level]) in btrfs_find_next_key()
5589 slot = path->slots[level] + 1; in btrfs_find_next_key()
5590 c = path->nodes[level]; in btrfs_find_next_key()
5596 if (level + 1 >= BTRFS_MAX_LEVEL || in btrfs_find_next_key()
5597 !path->nodes[level + 1]) in btrfs_find_next_key()
5600 if (path->locks[level + 1]) { in btrfs_find_next_key()
5601 level++; in btrfs_find_next_key()
5606 if (level == 0) in btrfs_find_next_key()
5613 path->lowest_level = level; in btrfs_find_next_key()
5620 c = path->nodes[level]; in btrfs_find_next_key()
5621 slot = path->slots[level]; in btrfs_find_next_key()
5627 if (level == 0) in btrfs_find_next_key()
5657 int level; in btrfs_next_old_leaf() local
5672 level = 1; in btrfs_next_old_leaf()
5721 while (level < BTRFS_MAX_LEVEL) { in btrfs_next_old_leaf()
5722 if (!path->nodes[level]) { in btrfs_next_old_leaf()
5727 slot = path->slots[level] + 1; in btrfs_next_old_leaf()
5728 c = path->nodes[level]; in btrfs_next_old_leaf()
5730 level++; in btrfs_next_old_leaf()
5731 if (level == BTRFS_MAX_LEVEL) { in btrfs_next_old_leaf()
5744 next_rw_lock = path->locks[level]; in btrfs_next_old_leaf()
5745 ret = read_block_for_search(NULL, root, path, &next, level, in btrfs_next_old_leaf()
5780 path->slots[level] = slot; in btrfs_next_old_leaf()
5782 level--; in btrfs_next_old_leaf()
5783 c = path->nodes[level]; in btrfs_next_old_leaf()
5784 if (path->locks[level]) in btrfs_next_old_leaf()
5785 btrfs_tree_unlock_rw(c, path->locks[level]); in btrfs_next_old_leaf()
5788 path->nodes[level] = next; in btrfs_next_old_leaf()
5789 path->slots[level] = 0; in btrfs_next_old_leaf()
5791 path->locks[level] = next_rw_lock; in btrfs_next_old_leaf()
5792 if (!level) in btrfs_next_old_leaf()
5795 ret = read_block_for_search(NULL, root, path, &next, level, in btrfs_next_old_leaf()