Lines Matching refs:path

29 		      *root, struct btrfs_path *path, int level);
32 struct btrfs_path *path, int data_size, int extend);
40 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path,
47 struct btrfs_path *path; in btrfs_alloc_path() local
48 path = kmem_cache_zalloc(btrfs_path_cachep, GFP_NOFS); in btrfs_alloc_path()
49 return path; in btrfs_alloc_path()
1352 tree_mod_log_rewind(struct btrfs_fs_info *fs_info, struct btrfs_path *path, in tree_mod_log_rewind() argument
1368 btrfs_set_path_blocking(path); in tree_mod_log_rewind()
1393 btrfs_clear_path_blocking(path, NULL, BTRFS_READ_LOCK); in tree_mod_log_rewind()
1882 struct btrfs_path *path, int level) in balance_level() argument
1891 int orig_slot = path->slots[level]; 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()
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()
2114 mid = path->nodes[level]; 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()
2235 struct btrfs_path *path, in reada_for_search() argument
2245 int direction = path->reada; in reada_for_search()
2254 if (!path->nodes[level]) in reada_for_search()
2257 node = path->nodes[level]; in reada_for_search()
2282 if (path->reada < 0 && objectid) { 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
2370 if (!path->nodes[i]) in unlock_up()
2372 if (!path->locks[i]) in unlock_up()
2374 if (!no_skips && path->slots[i] == 0) { in unlock_up()
2378 if (!no_skips && path->keep_locks) { in unlock_up()
2380 t = path->nodes[i]; in unlock_up()
2382 if (nritems < 1 || path->slots[i] >= nritems - 1) { in unlock_up()
2390 t = path->nodes[i]; in unlock_up()
2391 if (i >= lowest_unlock && i > skip_level && path->locks[i]) { in unlock_up()
2392 btrfs_tree_unlock_rw(t, path->locks[i]); in unlock_up()
2393 path->locks[i] = 0; in unlock_up()
2412 noinline void btrfs_unlock_up_safe(struct btrfs_path *path, int level) in btrfs_unlock_up_safe() argument
2416 if (path->keep_locks) in btrfs_unlock_up_safe()
2420 if (!path->nodes[i]) in btrfs_unlock_up_safe()
2422 if (!path->locks[i]) in btrfs_unlock_up_safe()
2424 btrfs_tree_unlock_rw(path->nodes[i], path->locks[i]); in btrfs_unlock_up_safe()
2425 path->locks[i] = 0; in btrfs_unlock_up_safe()
2616 int btrfs_find_item(struct btrfs_root *fs_root, struct btrfs_path *path, in btrfs_find_item() argument
2624 ASSERT(path); in btrfs_find_item()
2631 ret = btrfs_search_slot(NULL, fs_root, &key, path, 0, 0); in btrfs_find_item()
2635 eb = path->nodes[0]; in btrfs_find_item()
2636 if (ret && path->slots[0] >= btrfs_header_nritems(eb)) { in btrfs_find_item()
2637 ret = btrfs_next_leaf(fs_root, path); in btrfs_find_item()
2640 eb = path->nodes[0]; in btrfs_find_item()
2643 btrfs_item_key_to_cpu(eb, found_key, path->slots[0]); in btrfs_find_item()
3129 struct btrfs_path *path, in fixup_low_keys() argument
3136 int tslot = path->slots[i]; in fixup_low_keys()
3137 if (!path->nodes[i]) in fixup_low_keys()
3139 t = path->nodes[i]; in fixup_low_keys()
3142 btrfs_mark_buffer_dirty(path->nodes[i]); in fixup_low_keys()
3155 struct btrfs_path *path, in btrfs_set_item_key_safe() argument
3162 eb = path->nodes[0]; in btrfs_set_item_key_safe()
3163 slot = path->slots[0]; in btrfs_set_item_key_safe()
3177 fixup_low_keys(fs_info, path, &disk_key, 1); in btrfs_set_item_key_safe()
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()
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()
3397 struct btrfs_root *root, struct btrfs_path *path, 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()
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()
3519 insert_ptr(trans, root, path, &disk_key, split->start, 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()
3588 struct btrfs_path *path, in __push_leaf_right() argument
3594 struct extent_buffer *left = path->nodes[0]; in __push_leaf_right()
3595 struct extent_buffer *upper = path->nodes[1]; in __push_leaf_right()
3615 if (path->slots[0] >= left_nritems) in __push_leaf_right()
3618 slot = path->slots[1]; in __push_leaf_right()
3624 if (path->slots[0] > i) in __push_leaf_right()
3626 if (path->slots[0] == i) { in __push_leaf_right()
3633 if (path->slots[0] == i) in __push_leaf_right()
3705 if (path->slots[0] >= left_nritems) { in __push_leaf_right()
3706 path->slots[0] -= left_nritems; in __push_leaf_right()
3707 if (btrfs_header_nritems(path->nodes[0]) == 0) in __push_leaf_right()
3708 clean_tree_block(trans, root->fs_info, path->nodes[0]); in __push_leaf_right()
3709 btrfs_tree_unlock(path->nodes[0]); in __push_leaf_right()
3710 free_extent_buffer(path->nodes[0]); in __push_leaf_right()
3711 path->nodes[0] = right; in __push_leaf_right()
3712 path->slots[1] += 1; in __push_leaf_right()
3736 *root, struct btrfs_path *path, in push_leaf_right() argument
3740 struct extent_buffer *left = path->nodes[0]; in push_leaf_right()
3748 if (!path->nodes[1]) in push_leaf_right()
3751 slot = path->slots[1]; in push_leaf_right()
3752 upper = path->nodes[1]; in push_leaf_right()
3756 btrfs_assert_tree_locked(path->nodes[1]); in push_leaf_right()
3783 if (path->slots[0] == left_nritems && !empty) { in push_leaf_right()
3790 path->nodes[0] = right; in push_leaf_right()
3791 path->slots[0] = 0; in push_leaf_right()
3792 path->slots[1]++; in push_leaf_right()
3796 return __push_leaf_right(trans, root, path, min_data_size, empty, in push_leaf_right()
3814 struct btrfs_path *path, int data_size, in __push_leaf_left() argument
3820 struct extent_buffer *right = path->nodes[0]; in __push_leaf_left()
3843 if (path->slots[0] < i) in __push_leaf_left()
3845 if (path->slots[0] == i) { in __push_leaf_left()
3852 if (path->slots[0] == i) in __push_leaf_left()
3935 fixup_low_keys(root->fs_info, path, &disk_key, 1); in __push_leaf_left()
3938 if (path->slots[0] < push_items) { in __push_leaf_left()
3939 path->slots[0] += old_left_nritems; in __push_leaf_left()
3940 btrfs_tree_unlock(path->nodes[0]); in __push_leaf_left()
3941 free_extent_buffer(path->nodes[0]); in __push_leaf_left()
3942 path->nodes[0] = left; in __push_leaf_left()
3943 path->slots[1] -= 1; in __push_leaf_left()
3947 path->slots[0] -= push_items; in __push_leaf_left()
3949 BUG_ON(path->slots[0] < 0); in __push_leaf_left()
3966 *root, struct btrfs_path *path, int min_data_size, in push_leaf_left() argument
3969 struct extent_buffer *right = path->nodes[0]; in push_leaf_left()
3976 slot = path->slots[1]; in push_leaf_left()
3979 if (!path->nodes[1]) in push_leaf_left()
3986 btrfs_assert_tree_locked(path->nodes[1]); in push_leaf_left()
3988 left = read_node_slot(root, path->nodes[1], slot - 1); in push_leaf_left()
4003 path->nodes[1], slot - 1, &left); in push_leaf_left()
4017 return __push_leaf_left(trans, root, path, min_data_size, in push_leaf_left()
4032 struct btrfs_path *path, in copy_for_split() argument
4072 insert_ptr(trans, root, path, &disk_key, right->start, in copy_for_split()
4073 path->slots[1] + 1, 1); in copy_for_split()
4077 BUG_ON(path->slots[0] != slot); in copy_for_split()
4080 btrfs_tree_unlock(path->nodes[0]); in copy_for_split()
4081 free_extent_buffer(path->nodes[0]); in copy_for_split()
4082 path->nodes[0] = right; in copy_for_split()
4083 path->slots[0] -= mid; in copy_for_split()
4084 path->slots[1] += 1; in copy_for_split()
4090 BUG_ON(path->slots[0] < 0); in copy_for_split()
4105 struct btrfs_path *path, in push_for_double_split() argument
4114 slot = path->slots[0]; in push_for_double_split()
4115 if (slot < btrfs_header_nritems(path->nodes[0])) in push_for_double_split()
4116 space_needed -= btrfs_leaf_free_space(root, path->nodes[0]); in push_for_double_split()
4122 ret = push_leaf_right(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4129 nritems = btrfs_header_nritems(path->nodes[0]); in push_for_double_split()
4134 if (path->slots[0] == 0 || path->slots[0] == nritems) in push_for_double_split()
4137 if (btrfs_leaf_free_space(root, path->nodes[0]) >= data_size) in push_for_double_split()
4141 slot = path->slots[0]; in push_for_double_split()
4142 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4163 struct btrfs_path *path, int data_size, in split_leaf() argument
4179 l = path->nodes[0]; in split_leaf()
4180 slot = path->slots[0]; in split_leaf()
4186 if (data_size && path->nodes[1]) { in split_leaf()
4192 wret = push_leaf_right(trans, root, path, space_needed, in split_leaf()
4197 wret = push_leaf_left(trans, root, path, space_needed, in split_leaf()
4202 l = path->nodes[0]; in split_leaf()
4209 if (!path->nodes[1]) { in split_leaf()
4210 ret = insert_new_root(trans, root, path, 1); in split_leaf()
4216 l = path->nodes[0]; in split_leaf()
4217 slot = path->slots[0]; in split_leaf()
4286 insert_ptr(trans, root, path, &disk_key, right->start, in split_leaf()
4287 path->slots[1] + 1, 1); in split_leaf()
4288 btrfs_tree_unlock(path->nodes[0]); in split_leaf()
4289 free_extent_buffer(path->nodes[0]); in split_leaf()
4290 path->nodes[0] = right; in split_leaf()
4291 path->slots[0] = 0; in split_leaf()
4292 path->slots[1] += 1; in split_leaf()
4295 insert_ptr(trans, root, path, &disk_key, right->start, in split_leaf()
4296 path->slots[1], 1); in split_leaf()
4297 btrfs_tree_unlock(path->nodes[0]); in split_leaf()
4298 free_extent_buffer(path->nodes[0]); in split_leaf()
4299 path->nodes[0] = right; in split_leaf()
4300 path->slots[0] = 0; in split_leaf()
4301 if (path->slots[1] == 0) in split_leaf()
4302 fixup_low_keys(fs_info, path, &disk_key, 1); in split_leaf()
4308 copy_for_split(trans, root, path, l, right, slot, mid, nritems); in split_leaf()
4319 push_for_double_split(trans, root, path, data_size); in split_leaf()
4321 if (btrfs_leaf_free_space(root, path->nodes[0]) >= data_size) in split_leaf()
4328 struct btrfs_path *path, int ins_len) in setup_leaf_for_split() argument
4337 leaf = path->nodes[0]; in setup_leaf_for_split()
4338 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in setup_leaf_for_split()
4346 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in setup_leaf_for_split()
4348 fi = btrfs_item_ptr(leaf, path->slots[0], in setup_leaf_for_split()
4352 btrfs_release_path(path); in setup_leaf_for_split()
4354 path->keep_locks = 1; in setup_leaf_for_split()
4355 path->search_for_split = 1; in setup_leaf_for_split()
4356 ret = btrfs_search_slot(trans, root, &key, path, 0, 1); in setup_leaf_for_split()
4357 path->search_for_split = 0; in setup_leaf_for_split()
4364 leaf = path->nodes[0]; in setup_leaf_for_split()
4366 if (item_size != btrfs_item_size_nr(leaf, path->slots[0])) in setup_leaf_for_split()
4370 if (btrfs_leaf_free_space(root, path->nodes[0]) >= ins_len) in setup_leaf_for_split()
4374 fi = btrfs_item_ptr(leaf, path->slots[0], in setup_leaf_for_split()
4380 btrfs_set_path_blocking(path); in setup_leaf_for_split()
4381 ret = split_leaf(trans, root, &key, path, ins_len, 1); in setup_leaf_for_split()
4385 path->keep_locks = 0; in setup_leaf_for_split()
4386 btrfs_unlock_up_safe(path, 1); in setup_leaf_for_split()
4389 path->keep_locks = 0; in setup_leaf_for_split()
4395 struct btrfs_path *path, in split_item() argument
4409 leaf = path->nodes[0]; in split_item()
4412 btrfs_set_path_blocking(path); in split_item()
4414 item = btrfs_item_nr(path->slots[0]); in split_item()
4423 path->slots[0]), item_size); in split_item()
4425 slot = path->slots[0] + 1; in split_item()
4450 btrfs_item_ptr_offset(leaf, path->slots[0]), in split_item()
4481 struct btrfs_path *path, in btrfs_split_item() argument
4486 ret = setup_leaf_for_split(trans, root, path, in btrfs_split_item()
4491 ret = split_item(trans, root, path, new_key, split_offset); in btrfs_split_item()
4505 struct btrfs_path *path, in btrfs_duplicate_item() argument
4512 leaf = path->nodes[0]; in btrfs_duplicate_item()
4513 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in btrfs_duplicate_item()
4514 ret = setup_leaf_for_split(trans, root, path, in btrfs_duplicate_item()
4519 path->slots[0]++; in btrfs_duplicate_item()
4520 setup_items_for_insert(root, path, new_key, &item_size, in btrfs_duplicate_item()
4523 leaf = path->nodes[0]; in btrfs_duplicate_item()
4525 btrfs_item_ptr_offset(leaf, path->slots[0]), in btrfs_duplicate_item()
4526 btrfs_item_ptr_offset(leaf, path->slots[0] - 1), in btrfs_duplicate_item()
4537 void btrfs_truncate_item(struct btrfs_root *root, struct btrfs_path *path, in btrfs_truncate_item() argument
4553 leaf = path->nodes[0]; in btrfs_truncate_item()
4554 slot = path->slots[0]; in btrfs_truncate_item()
4620 fixup_low_keys(root->fs_info, path, &disk_key, 1); in btrfs_truncate_item()
4636 void btrfs_extend_item(struct btrfs_root *root, struct btrfs_path *path, in btrfs_extend_item() argument
4651 leaf = path->nodes[0]; in btrfs_extend_item()
4660 slot = path->slots[0]; in btrfs_extend_item()
4706 void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path, in setup_items_for_insert() argument
4719 if (path->slots[0] == 0) { in setup_items_for_insert()
4721 fixup_low_keys(root->fs_info, path, &disk_key, 1); in setup_items_for_insert()
4723 btrfs_unlock_up_safe(path, 1); in setup_items_for_insert()
4727 leaf = path->nodes[0]; in setup_items_for_insert()
4728 slot = path->slots[0]; in setup_items_for_insert()
4799 struct btrfs_path *path, in btrfs_insert_empty_items() argument
4813 ret = btrfs_search_slot(trans, root, cpu_key, path, total_size, 1); in btrfs_insert_empty_items()
4819 slot = path->slots[0]; in btrfs_insert_empty_items()
4822 setup_items_for_insert(root, path, cpu_key, data_size, in btrfs_insert_empty_items()
4836 struct btrfs_path *path; in btrfs_insert_item() local
4840 path = btrfs_alloc_path(); in btrfs_insert_item()
4841 if (!path) in btrfs_insert_item()
4843 ret = btrfs_insert_empty_item(trans, root, path, cpu_key, data_size); in btrfs_insert_item()
4845 leaf = path->nodes[0]; in btrfs_insert_item()
4846 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]); in btrfs_insert_item()
4850 btrfs_free_path(path); in btrfs_insert_item()
4860 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path, in del_ptr() argument
4863 struct extent_buffer *parent = path->nodes[level]; in del_ptr()
4893 fixup_low_keys(root->fs_info, path, &disk_key, level + 1); in del_ptr()
4910 struct btrfs_path *path, in btrfs_del_leaf() argument
4914 del_ptr(root, path, 1, path->slots[1]); in btrfs_del_leaf()
4920 btrfs_unlock_up_safe(path, 0); in btrfs_del_leaf()
4933 struct btrfs_path *path, int slot, int nr) in btrfs_del_items() argument
4947 leaf = path->nodes[0]; in btrfs_del_items()
4985 btrfs_set_path_blocking(path); in btrfs_del_items()
4987 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
4995 fixup_low_keys(root->fs_info, path, &disk_key, 1); in btrfs_del_items()
5004 slot = path->slots[1]; in btrfs_del_items()
5007 btrfs_set_path_blocking(path); in btrfs_del_items()
5008 wret = push_leaf_left(trans, root, path, 1, 1, in btrfs_del_items()
5013 if (path->nodes[0] == leaf && in btrfs_del_items()
5015 wret = push_leaf_right(trans, root, path, 1, in btrfs_del_items()
5022 path->slots[1] = slot; in btrfs_del_items()
5023 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
5032 if (path->nodes[0] == leaf) in btrfs_del_items()
5051 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_prev_leaf() argument
5057 btrfs_item_key_to_cpu(path->nodes[0], &key, 0); in btrfs_prev_leaf()
5072 btrfs_release_path(path); in btrfs_prev_leaf()
5073 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_prev_leaf()
5076 btrfs_item_key(path->nodes[0], &found_key, 0); in btrfs_prev_leaf()
5116 struct btrfs_path *path, in btrfs_search_forward() argument
5126 int keep_locks = path->keep_locks; in btrfs_search_forward()
5128 path->keep_locks = 1; 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()
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()
5177 btrfs_set_path_blocking(path); in btrfs_search_forward()
5178 sret = btrfs_find_next_key(root, path, min_key, level, in btrfs_search_forward()
5181 btrfs_release_path(path); in btrfs_search_forward()
5189 path->slots[level] = slot; in btrfs_search_forward()
5190 if (level == path->lowest_level) { in btrfs_search_forward()
5194 btrfs_set_path_blocking(path); 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()
5203 btrfs_clear_path_blocking(path, NULL, 0); in btrfs_search_forward()
5206 path->keep_locks = keep_locks; in btrfs_search_forward()
5208 btrfs_unlock_up_safe(path, path->lowest_level + 1); in btrfs_search_forward()
5209 btrfs_set_path_blocking(path); in btrfs_search_forward()
5216 struct btrfs_path *path, in tree_move_down() argument
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()
5227 struct btrfs_path *path, 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()
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()
5245 path->slots[*level]++; in tree_move_next_or_upnext()
5247 nritems = btrfs_header_nritems(path->nodes[*level]); in tree_move_next_or_upnext()
5258 struct btrfs_path *path, in tree_advance() argument
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()
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()
5578 int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, in btrfs_find_next_key() argument
5584 WARN_ON(!path->keep_locks); 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()
5597 !path->nodes[level + 1]) in btrfs_find_next_key()
5600 if (path->locks[level + 1]) { in btrfs_find_next_key()
5611 orig_lowest = path->lowest_level; in btrfs_find_next_key()
5612 btrfs_release_path(path); in btrfs_find_next_key()
5613 path->lowest_level = level; in btrfs_find_next_key()
5614 ret = btrfs_search_slot(NULL, root, &cur_key, path, in btrfs_find_next_key()
5616 path->lowest_level = orig_lowest; 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()
5648 int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_next_leaf() argument
5650 return btrfs_next_old_leaf(root, path, 0); in btrfs_next_leaf()
5653 int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, in btrfs_next_old_leaf() argument
5663 int old_spinning = path->leave_spinning; in btrfs_next_old_leaf()
5666 nritems = btrfs_header_nritems(path->nodes[0]); in btrfs_next_old_leaf()
5670 btrfs_item_key_to_cpu(path->nodes[0], &key, nritems - 1); in btrfs_next_old_leaf()
5675 btrfs_release_path(path); in btrfs_next_old_leaf()
5677 path->keep_locks = 1; in btrfs_next_old_leaf()
5678 path->leave_spinning = 1; in btrfs_next_old_leaf()
5681 ret = btrfs_search_old_slot(root, &key, path, time_seq); in btrfs_next_old_leaf()
5683 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_next_old_leaf()
5684 path->keep_locks = 0; in btrfs_next_old_leaf()
5689 nritems = btrfs_header_nritems(path->nodes[0]); in btrfs_next_old_leaf()
5696 if (nritems > 0 && path->slots[0] < nritems - 1) { in btrfs_next_old_leaf()
5698 path->slots[0]++; in btrfs_next_old_leaf()
5716 if (nritems > 0 && ret > 0 && path->slots[0] == nritems - 1) { 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()
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()
5751 btrfs_release_path(path); in btrfs_next_old_leaf()
5755 if (!path->skip_locking) { in btrfs_next_old_leaf()
5766 btrfs_release_path(path); in btrfs_next_old_leaf()
5771 btrfs_set_path_blocking(path); in btrfs_next_old_leaf()
5773 btrfs_clear_path_blocking(path, next, in btrfs_next_old_leaf()
5780 path->slots[level] = slot; 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()
5790 if (!path->skip_locking) in btrfs_next_old_leaf()
5791 path->locks[level] = next_rw_lock; in btrfs_next_old_leaf()
5795 ret = read_block_for_search(NULL, root, path, &next, level, in btrfs_next_old_leaf()
5801 btrfs_release_path(path); in btrfs_next_old_leaf()
5805 if (!path->skip_locking) { in btrfs_next_old_leaf()
5808 btrfs_set_path_blocking(path); in btrfs_next_old_leaf()
5810 btrfs_clear_path_blocking(path, next, in btrfs_next_old_leaf()
5818 unlock_up(path, 0, 1, 0, NULL); in btrfs_next_old_leaf()
5819 path->leave_spinning = old_spinning; in btrfs_next_old_leaf()
5821 btrfs_set_path_blocking(path); in btrfs_next_old_leaf()
5833 struct btrfs_path *path, u64 min_objectid, in btrfs_previous_item() argument
5842 if (path->slots[0] == 0) { in btrfs_previous_item()
5843 btrfs_set_path_blocking(path); in btrfs_previous_item()
5844 ret = btrfs_prev_leaf(root, path); in btrfs_previous_item()
5848 path->slots[0]--; in btrfs_previous_item()
5850 leaf = path->nodes[0]; in btrfs_previous_item()
5854 if (path->slots[0] == nritems) in btrfs_previous_item()
5855 path->slots[0]--; in btrfs_previous_item()
5857 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); in btrfs_previous_item()
5876 struct btrfs_path *path, u64 min_objectid) in btrfs_previous_extent_item() argument
5884 if (path->slots[0] == 0) { in btrfs_previous_extent_item()
5885 btrfs_set_path_blocking(path); in btrfs_previous_extent_item()
5886 ret = btrfs_prev_leaf(root, path); in btrfs_previous_extent_item()
5890 path->slots[0]--; in btrfs_previous_extent_item()
5892 leaf = path->nodes[0]; in btrfs_previous_extent_item()
5896 if (path->slots[0] == nritems) in btrfs_previous_extent_item()
5897 path->slots[0]--; in btrfs_previous_extent_item()
5899 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); in btrfs_previous_extent_item()