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()
1472 btrfs_set_header_level(eb, old_root->level); in get_old_root()
1487 int level; in btrfs_old_root_level() local
1492 level = tm->old_root.level; in btrfs_old_root_level()
1494 level = btrfs_header_level(eb_root); in btrfs_old_root_level()
1498 return level; in btrfs_old_root_level()
1815 int level, int *slot) in bin_search() argument
1817 if (level == 0) in bin_search()
1832 int level, int *slot) in btrfs_bin_search() argument
1834 return bin_search(eb, key, level, slot); in btrfs_bin_search()
1860 int level = btrfs_header_level(parent); in read_node_slot() local
1868 BUG_ON(level == 0); in read_node_slot()
1888 struct btrfs_path *path, int level) in balance_level() argument
1897 int orig_slot = path->slots[level]; in balance_level()
1900 if (level == 0) in balance_level()
1903 mid = path->nodes[level]; in balance_level()
1905 WARN_ON(path->locks[level] != BTRFS_WRITE_LOCK && in balance_level()
1906 path->locks[level] != BTRFS_WRITE_LOCK_BLOCKING); in balance_level()
1911 if (level < BTRFS_MAX_LEVEL - 1) { in balance_level()
1912 parent = path->nodes[level + 1]; in balance_level()
1913 pslot = path->slots[level + 1]; in balance_level()
1949 path->locks[level] = 0; in balance_level()
1950 path->nodes[level] = NULL; in balance_level()
2007 del_ptr(root, path, level + 1, pslot + 1); in balance_level()
2051 del_ptr(root, path, level + 1, pslot); in balance_level()
2071 path->nodes[level] = left; in balance_level()
2072 path->slots[level + 1] -= 1; in balance_level()
2073 path->slots[level] = orig_slot; in balance_level()
2080 path->slots[level] = orig_slot; in balance_level()
2085 btrfs_node_blockptr(path->nodes[level], path->slots[level])) in balance_level()
2093 if (path->nodes[level] != left) in balance_level()
2106 struct btrfs_path *path, int level) in push_nodes_for_insert() argument
2115 int orig_slot = path->slots[level]; in push_nodes_for_insert()
2117 if (level == 0) in push_nodes_for_insert()
2120 mid = path->nodes[level]; in push_nodes_for_insert()
2123 if (level < BTRFS_MAX_LEVEL - 1) { in push_nodes_for_insert()
2124 parent = path->nodes[level + 1]; in push_nodes_for_insert()
2125 pslot = path->slots[level + 1]; in push_nodes_for_insert()
2164 path->nodes[level] = left; in push_nodes_for_insert()
2165 path->slots[level + 1] -= 1; in push_nodes_for_insert()
2166 path->slots[level] = orig_slot; in push_nodes_for_insert()
2172 path->slots[level] = orig_slot; in push_nodes_for_insert()
2218 path->nodes[level] = right; in push_nodes_for_insert()
2219 path->slots[level + 1] += 1; in push_nodes_for_insert()
2220 path->slots[level] = orig_slot - in push_nodes_for_insert()
2242 int level, int slot, u64 objectid) in reada_for_search() argument
2257 if (level != 1) in reada_for_search()
2260 if (!path->nodes[level]) in reada_for_search()
2263 node = path->nodes[level]; in reada_for_search()
2307 struct btrfs_path *path, int level) in reada_for_balance() argument
2317 parent = path->nodes[level + 1]; in reada_for_balance()
2322 slot = path->slots[level + 1]; in reada_for_balance()
2366 static noinline void unlock_up(struct btrfs_path *path, int level, in unlock_up() argument
2371 int skip_level = level; in unlock_up()
2375 for (i = level; i < BTRFS_MAX_LEVEL; i++) { in unlock_up()
2418 noinline void btrfs_unlock_up_safe(struct btrfs_path *path, int level) in btrfs_unlock_up_safe() argument
2425 for (i = level; i < BTRFS_MAX_LEVEL; i++) { in btrfs_unlock_up_safe()
2446 struct extent_buffer **eb_ret, int level, int slot, in read_block_for_search() argument
2492 btrfs_unlock_up_safe(p, level + 1); in read_block_for_search()
2497 reada_for_search(root, p, level, slot, key->objectid); in read_block_for_search()
2529 struct extent_buffer *b, int level, int ins_len, in setup_nodes_for_search() argument
2537 if (*write_lock_level < level + 1) { in setup_nodes_for_search()
2538 *write_lock_level = level + 1; in setup_nodes_for_search()
2544 reada_for_balance(root, p, level); in setup_nodes_for_search()
2545 sret = split_node(trans, root, p, level); in setup_nodes_for_search()
2553 b = p->nodes[level]; in setup_nodes_for_search()
2558 if (*write_lock_level < level + 1) { in setup_nodes_for_search()
2559 *write_lock_level = level + 1; in setup_nodes_for_search()
2565 reada_for_balance(root, p, level); in setup_nodes_for_search()
2566 sret = balance_level(trans, root, p, level); in setup_nodes_for_search()
2573 b = p->nodes[level]; in setup_nodes_for_search()
2590 int level) in key_search_validate() argument
2597 if (level == 0) in key_search_validate()
2609 int level, int *prev_cmp, int *slot) in key_search() argument
2612 *prev_cmp = bin_search(b, key, level, slot); in key_search()
2616 key_search_validate(b, key, level); in key_search()
2678 int level; in btrfs_search_slot() local
2722 level = 0; in btrfs_search_slot()
2732 level = btrfs_header_level(b); in btrfs_search_slot()
2740 level = btrfs_header_level(b); in btrfs_search_slot()
2746 level = btrfs_header_level(b); in btrfs_search_slot()
2747 if (level <= write_lock_level) { in btrfs_search_slot()
2755 level = btrfs_header_level(b); in btrfs_search_slot()
2759 p->nodes[level] = b; in btrfs_search_slot()
2761 p->locks[level] = root_lock; in btrfs_search_slot()
2764 level = btrfs_header_level(b); in btrfs_search_slot()
2783 if (level > write_lock_level || in btrfs_search_slot()
2784 (level + 1 > write_lock_level && in btrfs_search_slot()
2785 level + 1 < BTRFS_MAX_LEVEL && in btrfs_search_slot()
2786 p->nodes[level + 1])) { in btrfs_search_slot()
2787 write_lock_level = level + 1; in btrfs_search_slot()
2794 p->nodes[level + 1], in btrfs_search_slot()
2795 p->slots[level + 1], &b); in btrfs_search_slot()
2802 p->nodes[level] = b; in btrfs_search_slot()
2817 int u = level + 1; in btrfs_search_slot()
2825 ret = key_search(b, key, level, &prev_cmp, &slot); in btrfs_search_slot()
2827 if (level != 0) { in btrfs_search_slot()
2833 p->slots[level] = slot; in btrfs_search_slot()
2834 err = setup_nodes_for_search(trans, root, p, b, level, in btrfs_search_slot()
2842 b = p->nodes[level]; in btrfs_search_slot()
2843 slot = p->slots[level]; in btrfs_search_slot()
2852 write_lock_level < level + 1) { in btrfs_search_slot()
2853 write_lock_level = level + 1; in btrfs_search_slot()
2858 unlock_up(p, level, lowest_unlock, in btrfs_search_slot()
2861 if (level == lowest_level) { in btrfs_search_slot()
2863 p->slots[level]++; in btrfs_search_slot()
2868 &b, level, slot, key, 0); in btrfs_search_slot()
2877 level = btrfs_header_level(b); in btrfs_search_slot()
2878 if (level <= write_lock_level) { in btrfs_search_slot()
2886 p->locks[level] = BTRFS_WRITE_LOCK; in btrfs_search_slot()
2895 p->locks[level] = BTRFS_READ_LOCK; in btrfs_search_slot()
2897 p->nodes[level] = b; in btrfs_search_slot()
2900 p->slots[level] = slot; in btrfs_search_slot()
2921 unlock_up(p, level, lowest_unlock, in btrfs_search_slot()
2957 int level; in btrfs_search_old_slot() local
2972 level = btrfs_header_level(b); in btrfs_search_old_slot()
2973 p->locks[level] = BTRFS_READ_LOCK; in btrfs_search_old_slot()
2976 level = btrfs_header_level(b); in btrfs_search_old_slot()
2977 p->nodes[level] = b; in btrfs_search_old_slot()
2986 btrfs_unlock_up_safe(p, level + 1); in btrfs_search_old_slot()
2993 ret = key_search(b, key, level, &prev_cmp, &slot); in btrfs_search_old_slot()
2995 if (level != 0) { in btrfs_search_old_slot()
3001 p->slots[level] = slot; in btrfs_search_old_slot()
3002 unlock_up(p, level, lowest_unlock, 0, NULL); in btrfs_search_old_slot()
3004 if (level == lowest_level) { in btrfs_search_old_slot()
3006 p->slots[level]++; in btrfs_search_old_slot()
3010 err = read_block_for_search(NULL, root, p, &b, level, in btrfs_search_old_slot()
3019 level = btrfs_header_level(b); in btrfs_search_old_slot()
3032 p->locks[level] = BTRFS_READ_LOCK; in btrfs_search_old_slot()
3033 p->nodes[level] = b; in btrfs_search_old_slot()
3035 p->slots[level] = slot; in btrfs_search_old_slot()
3036 unlock_up(p, level, lowest_unlock, 0, NULL); in btrfs_search_old_slot()
3136 struct btrfs_disk_key *key, int level) in fixup_low_keys() argument
3141 for (i = level; i < BTRFS_MAX_LEVEL; i++) { in fixup_low_keys()
3333 struct btrfs_path *path, int level) in insert_new_root() argument
3341 BUG_ON(path->nodes[level]); in insert_new_root()
3342 BUG_ON(path->nodes[level-1] != root->node); in insert_new_root()
3344 lower = path->nodes[level-1]; in insert_new_root()
3345 if (level == 1) in insert_new_root()
3351 &lower_key, level, root->node->start, 0); in insert_new_root()
3359 btrfs_set_header_level(c, level); in insert_new_root()
3389 path->nodes[level] = c; in insert_new_root()
3390 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in insert_new_root()
3391 path->slots[level] = 0; in insert_new_root()
3405 int slot, int level) in insert_ptr() argument
3411 BUG_ON(!path->nodes[level]); in insert_ptr()
3412 btrfs_assert_tree_locked(path->nodes[level]); in insert_ptr()
3413 lower = path->nodes[level]; in insert_ptr()
3418 if (level) in insert_ptr()
3426 if (level) { in insert_ptr()
3450 struct btrfs_path *path, int level) in split_node() argument
3459 c = path->nodes[level]; in split_node()
3472 ret = insert_new_root(trans, root, path, level + 1); in split_node()
3476 ret = push_nodes_for_insert(trans, root, path, level); in split_node()
3477 c = path->nodes[level]; in split_node()
3490 &disk_key, level, c->start, 0); in split_node()
3526 path->slots[level + 1] + 1, level + 1); in split_node()
3528 if (path->slots[level] >= mid) { in split_node()
3529 path->slots[level] -= mid; in split_node()
3532 path->nodes[level] = split; in split_node()
3533 path->slots[level + 1] += 1; in split_node()
4867 int level, int slot) in del_ptr() argument
4869 struct extent_buffer *parent = path->nodes[level]; in del_ptr()
4875 if (level) in del_ptr()
4883 } else if (level) { in del_ptr()
4899 fixup_low_keys(root->fs_info, path, &disk_key, level + 1); in del_ptr()
5130 int level; in btrfs_search_forward() local
5137 level = btrfs_header_level(cur); in btrfs_search_forward()
5138 WARN_ON(path->nodes[level]); in btrfs_search_forward()
5139 path->nodes[level] = cur; in btrfs_search_forward()
5140 path->locks[level] = BTRFS_READ_LOCK; in btrfs_search_forward()
5148 level = btrfs_header_level(cur); in btrfs_search_forward()
5149 sret = bin_search(cur, min_key, level, &slot); in btrfs_search_forward()
5152 if (level == path->lowest_level) { in btrfs_search_forward()
5156 path->slots[level] = slot; in btrfs_search_forward()
5182 path->slots[level] = slot; in btrfs_search_forward()
5184 sret = btrfs_find_next_key(root, path, min_key, level, in btrfs_search_forward()
5195 path->slots[level] = slot; in btrfs_search_forward()
5196 if (level == path->lowest_level) { in btrfs_search_forward()
5206 path->locks[level - 1] = BTRFS_READ_LOCK; in btrfs_search_forward()
5207 path->nodes[level - 1] = cur; in btrfs_search_forward()
5208 unlock_up(path, level, 1, 0, NULL); in btrfs_search_forward()
5223 int *level, int root_level) in tree_move_down() argument
5225 BUG_ON(*level == 0); in tree_move_down()
5226 path->nodes[*level - 1] = read_node_slot(root, path->nodes[*level], in tree_move_down()
5227 path->slots[*level]); in tree_move_down()
5228 path->slots[*level - 1] = 0; in tree_move_down()
5229 (*level)--; in tree_move_down()
5234 int *level, int root_level) in tree_move_next_or_upnext() argument
5238 nritems = btrfs_header_nritems(path->nodes[*level]); in tree_move_next_or_upnext()
5240 path->slots[*level]++; in tree_move_next_or_upnext()
5242 while (path->slots[*level] >= nritems) { in tree_move_next_or_upnext()
5243 if (*level == root_level) in tree_move_next_or_upnext()
5247 path->slots[*level] = 0; in tree_move_next_or_upnext()
5248 free_extent_buffer(path->nodes[*level]); in tree_move_next_or_upnext()
5249 path->nodes[*level] = NULL; in tree_move_next_or_upnext()
5250 (*level)++; in tree_move_next_or_upnext()
5251 path->slots[*level]++; in tree_move_next_or_upnext()
5253 nritems = btrfs_header_nritems(path->nodes[*level]); in tree_move_next_or_upnext()
5265 int *level, int root_level, in tree_advance() argument
5271 if (*level == 0 || !allow_down) { in tree_advance()
5272 ret = tree_move_next_or_upnext(root, path, level, root_level); in tree_advance()
5274 tree_move_down(root, path, level, root_level); in tree_advance()
5278 if (*level == 0) in tree_advance()
5279 btrfs_item_key_to_cpu(path->nodes[*level], key, in tree_advance()
5280 path->slots[*level]); in tree_advance()
5282 btrfs_node_key_to_cpu(path->nodes[*level], key, in tree_advance()
5283 path->slots[*level]); in tree_advance()
5585 struct btrfs_key *key, int level, u64 min_trans) in btrfs_find_next_key() argument
5591 while (level < BTRFS_MAX_LEVEL) { in btrfs_find_next_key()
5592 if (!path->nodes[level]) in btrfs_find_next_key()
5595 slot = path->slots[level] + 1; in btrfs_find_next_key()
5596 c = path->nodes[level]; in btrfs_find_next_key()
5602 if (level + 1 >= BTRFS_MAX_LEVEL || in btrfs_find_next_key()
5603 !path->nodes[level + 1]) in btrfs_find_next_key()
5606 if (path->locks[level + 1]) { in btrfs_find_next_key()
5607 level++; in btrfs_find_next_key()
5612 if (level == 0) in btrfs_find_next_key()
5619 path->lowest_level = level; in btrfs_find_next_key()
5626 c = path->nodes[level]; in btrfs_find_next_key()
5627 slot = path->slots[level]; in btrfs_find_next_key()
5633 if (level == 0) in btrfs_find_next_key()
5663 int level; in btrfs_next_old_leaf() local
5678 level = 1; in btrfs_next_old_leaf()
5727 while (level < BTRFS_MAX_LEVEL) { in btrfs_next_old_leaf()
5728 if (!path->nodes[level]) { in btrfs_next_old_leaf()
5733 slot = path->slots[level] + 1; in btrfs_next_old_leaf()
5734 c = path->nodes[level]; in btrfs_next_old_leaf()
5736 level++; in btrfs_next_old_leaf()
5737 if (level == BTRFS_MAX_LEVEL) { in btrfs_next_old_leaf()
5750 next_rw_lock = path->locks[level]; in btrfs_next_old_leaf()
5751 ret = read_block_for_search(NULL, root, path, &next, level, in btrfs_next_old_leaf()
5786 path->slots[level] = slot; in btrfs_next_old_leaf()
5788 level--; in btrfs_next_old_leaf()
5789 c = path->nodes[level]; in btrfs_next_old_leaf()
5790 if (path->locks[level]) in btrfs_next_old_leaf()
5791 btrfs_tree_unlock_rw(c, path->locks[level]); in btrfs_next_old_leaf()
5794 path->nodes[level] = next; in btrfs_next_old_leaf()
5795 path->slots[level] = 0; in btrfs_next_old_leaf()
5797 path->locks[level] = next_rw_lock; in btrfs_next_old_leaf()
5798 if (!level) in btrfs_next_old_leaf()
5801 ret = read_block_for_search(NULL, root, path, &next, level, in btrfs_next_old_leaf()