Lines Matching refs:path
17 *root, struct btrfs_path *path, int level);
19 const struct btrfs_key *ins_key, struct btrfs_path *path,
29 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path,
1268 tree_mod_log_rewind(struct btrfs_fs_info *fs_info, struct btrfs_path *path, in tree_mod_log_rewind() argument
1284 btrfs_set_path_blocking(path); in tree_mod_log_rewind()
1309 btrfs_clear_path_blocking(path, NULL, BTRFS_READ_LOCK); in tree_mod_log_rewind()
1805 struct btrfs_path *path, int level) in balance_level() argument
1815 int orig_slot = path->slots[level]; in balance_level()
1821 mid = path->nodes[level]; in balance_level()
1823 WARN_ON(path->locks[level] != BTRFS_WRITE_LOCK && in balance_level()
1824 path->locks[level] != BTRFS_WRITE_LOCK_BLOCKING); in balance_level()
1830 parent = path->nodes[level + 1]; in balance_level()
1831 pslot = path->slots[level + 1]; in balance_level()
1868 path->locks[level] = 0; in balance_level()
1869 path->nodes[level] = NULL; in balance_level()
1933 del_ptr(root, path, level + 1, pslot + 1); in balance_level()
1978 del_ptr(root, path, level + 1, pslot); in balance_level()
1999 path->nodes[level] = left; in balance_level()
2000 path->slots[level + 1] -= 1; in balance_level()
2001 path->slots[level] = orig_slot; in balance_level()
2008 path->slots[level] = orig_slot; in balance_level()
2013 btrfs_node_blockptr(path->nodes[level], path->slots[level])) in balance_level()
2021 if (path->nodes[level] != left) in balance_level()
2034 struct btrfs_path *path, int level) in push_nodes_for_insert() argument
2044 int orig_slot = path->slots[level]; in push_nodes_for_insert()
2049 mid = path->nodes[level]; in push_nodes_for_insert()
2053 parent = path->nodes[level + 1]; in push_nodes_for_insert()
2054 pslot = path->slots[level + 1]; in push_nodes_for_insert()
2096 path->nodes[level] = left; in push_nodes_for_insert()
2097 path->slots[level + 1] -= 1; in push_nodes_for_insert()
2098 path->slots[level] = orig_slot; in push_nodes_for_insert()
2104 path->slots[level] = orig_slot; in push_nodes_for_insert()
2153 path->nodes[level] = right; in push_nodes_for_insert()
2154 path->slots[level + 1] += 1; in push_nodes_for_insert()
2155 path->slots[level] = orig_slot - in push_nodes_for_insert()
2176 struct btrfs_path *path, in reada_for_search() argument
2193 if (!path->nodes[level]) in reada_for_search()
2196 node = path->nodes[level]; in reada_for_search()
2212 if (path->reada == READA_BACK) { in reada_for_search()
2216 } else if (path->reada == READA_FORWARD) { in reada_for_search()
2221 if (path->reada == READA_BACK && objectid) { in reada_for_search()
2239 struct btrfs_path *path, int level) in reada_for_balance() argument
2249 parent = path->nodes[level + 1]; in reada_for_balance()
2254 slot = path->slots[level + 1]; in reada_for_balance()
2298 static noinline void unlock_up(struct btrfs_path *path, int level, in unlock_up() argument
2308 if (!path->nodes[i]) in unlock_up()
2310 if (!path->locks[i]) in unlock_up()
2312 if (!no_skips && path->slots[i] == 0) { in unlock_up()
2316 if (!no_skips && path->keep_locks) { in unlock_up()
2318 t = path->nodes[i]; in unlock_up()
2320 if (nritems < 1 || path->slots[i] >= nritems - 1) { in unlock_up()
2328 t = path->nodes[i]; in unlock_up()
2330 btrfs_tree_unlock_rw(t, path->locks[i]); in unlock_up()
2331 path->locks[i] = 0; in unlock_up()
2350 noinline void btrfs_unlock_up_safe(struct btrfs_path *path, int level) in btrfs_unlock_up_safe() argument
2354 if (path->keep_locks) in btrfs_unlock_up_safe()
2358 if (!path->nodes[i]) in btrfs_unlock_up_safe()
2360 if (!path->locks[i]) in btrfs_unlock_up_safe()
2362 btrfs_tree_unlock_rw(path->nodes[i], path->locks[i]); in btrfs_unlock_up_safe()
2363 path->locks[i] = 0; in btrfs_unlock_up_safe()
2562 int btrfs_find_item(struct btrfs_root *fs_root, struct btrfs_path *path, in btrfs_find_item() argument
2570 ASSERT(path); in btrfs_find_item()
2577 ret = btrfs_search_slot(NULL, fs_root, &key, path, 0, 0); in btrfs_find_item()
2581 eb = path->nodes[0]; in btrfs_find_item()
2582 if (ret && path->slots[0] >= btrfs_header_nritems(eb)) { in btrfs_find_item()
2583 ret = btrfs_next_leaf(fs_root, path); in btrfs_find_item()
2586 eb = path->nodes[0]; in btrfs_find_item()
2589 btrfs_item_key_to_cpu(eb, found_key, path->slots[0]); in btrfs_find_item()
3127 static void fixup_low_keys(struct btrfs_path *path, in fixup_low_keys() argument
3135 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()
3144 btrfs_mark_buffer_dirty(path->nodes[i]); in fixup_low_keys()
3157 struct btrfs_path *path, in btrfs_set_item_key_safe() argument
3164 eb = path->nodes[0]; in btrfs_set_item_key_safe()
3165 slot = path->slots[0]; in btrfs_set_item_key_safe()
3179 fixup_low_keys(path, &disk_key, 1); in btrfs_set_item_key_safe()
3331 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()
3377 path->nodes[level] = c; in insert_new_root()
3378 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in insert_new_root()
3379 path->slots[level] = 0; in insert_new_root()
3391 struct btrfs_fs_info *fs_info, struct btrfs_path *path, in insert_ptr() argument
3399 BUG_ON(!path->nodes[level]); in insert_ptr()
3400 btrfs_assert_tree_locked(path->nodes[level]); in insert_ptr()
3401 lower = path->nodes[level]; in insert_ptr()
3440 struct btrfs_path *path, int level) in split_node() argument
3450 c = path->nodes[level]; in split_node()
3463 ret = insert_new_root(trans, root, path, level + 1); in split_node()
3467 ret = push_nodes_for_insert(trans, root, path, level); in split_node()
3468 c = path->nodes[level]; in split_node()
3504 insert_ptr(trans, fs_info, path, &disk_key, split->start, in split_node()
3505 path->slots[level + 1] + 1, level + 1); in split_node()
3507 if (path->slots[level] >= mid) { in split_node()
3508 path->slots[level] -= mid; in split_node()
3511 path->nodes[level] = split; in split_node()
3512 path->slots[level + 1] += 1; in split_node()
3574 struct btrfs_path *path, in __push_leaf_right() argument
3580 struct extent_buffer *left = path->nodes[0]; in __push_leaf_right()
3581 struct extent_buffer *upper = path->nodes[1]; in __push_leaf_right()
3601 if (path->slots[0] >= left_nritems) in __push_leaf_right()
3604 slot = path->slots[1]; in __push_leaf_right()
3610 if (path->slots[0] > i) in __push_leaf_right()
3612 if (path->slots[0] == i) { in __push_leaf_right()
3619 if (path->slots[0] == i) in __push_leaf_right()
3691 if (path->slots[0] >= left_nritems) { in __push_leaf_right()
3692 path->slots[0] -= left_nritems; in __push_leaf_right()
3693 if (btrfs_header_nritems(path->nodes[0]) == 0) in __push_leaf_right()
3694 clean_tree_block(fs_info, path->nodes[0]); in __push_leaf_right()
3695 btrfs_tree_unlock(path->nodes[0]); in __push_leaf_right()
3696 free_extent_buffer(path->nodes[0]); in __push_leaf_right()
3697 path->nodes[0] = right; in __push_leaf_right()
3698 path->slots[1] += 1; in __push_leaf_right()
3722 *root, struct btrfs_path *path, in push_leaf_right() argument
3727 struct extent_buffer *left = path->nodes[0]; in push_leaf_right()
3735 if (!path->nodes[1]) in push_leaf_right()
3738 slot = path->slots[1]; in push_leaf_right()
3739 upper = path->nodes[1]; in push_leaf_right()
3743 btrfs_assert_tree_locked(path->nodes[1]); in push_leaf_right()
3774 if (path->slots[0] == left_nritems && !empty) { in push_leaf_right()
3781 path->nodes[0] = right; in push_leaf_right()
3782 path->slots[0] = 0; in push_leaf_right()
3783 path->slots[1]++; in push_leaf_right()
3787 return __push_leaf_right(fs_info, path, min_data_size, empty, in push_leaf_right()
3804 struct btrfs_path *path, int data_size, in __push_leaf_left() argument
3810 struct extent_buffer *right = path->nodes[0]; in __push_leaf_left()
3833 if (path->slots[0] < i) in __push_leaf_left()
3835 if (path->slots[0] == i) { in __push_leaf_left()
3842 if (path->slots[0] == i) in __push_leaf_left()
3925 fixup_low_keys(path, &disk_key, 1); in __push_leaf_left()
3928 if (path->slots[0] < push_items) { in __push_leaf_left()
3929 path->slots[0] += old_left_nritems; in __push_leaf_left()
3930 btrfs_tree_unlock(path->nodes[0]); in __push_leaf_left()
3931 free_extent_buffer(path->nodes[0]); in __push_leaf_left()
3932 path->nodes[0] = left; in __push_leaf_left()
3933 path->slots[1] -= 1; in __push_leaf_left()
3937 path->slots[0] -= push_items; in __push_leaf_left()
3939 BUG_ON(path->slots[0] < 0); in __push_leaf_left()
3956 *root, struct btrfs_path *path, int min_data_size, in push_leaf_left() argument
3960 struct extent_buffer *right = path->nodes[0]; in push_leaf_left()
3967 slot = path->slots[1]; in push_leaf_left()
3970 if (!path->nodes[1]) in push_leaf_left()
3977 btrfs_assert_tree_locked(path->nodes[1]); in push_leaf_left()
3979 left = read_node_slot(fs_info, path->nodes[1], slot - 1); in push_leaf_left()
3998 path->nodes[1], slot - 1, &left); in push_leaf_left()
4012 return __push_leaf_left(fs_info, path, min_data_size, in push_leaf_left()
4027 struct btrfs_path *path, in copy_for_split() argument
4066 insert_ptr(trans, fs_info, path, &disk_key, right->start, in copy_for_split()
4067 path->slots[1] + 1, 1); in copy_for_split()
4071 BUG_ON(path->slots[0] != slot); in copy_for_split()
4074 btrfs_tree_unlock(path->nodes[0]); in copy_for_split()
4075 free_extent_buffer(path->nodes[0]); in copy_for_split()
4076 path->nodes[0] = right; in copy_for_split()
4077 path->slots[0] -= mid; in copy_for_split()
4078 path->slots[1] += 1; in copy_for_split()
4084 BUG_ON(path->slots[0] < 0); in copy_for_split()
4099 struct btrfs_path *path, in push_for_double_split() argument
4109 slot = path->slots[0]; in push_for_double_split()
4110 if (slot < btrfs_header_nritems(path->nodes[0])) in push_for_double_split()
4111 space_needed -= btrfs_leaf_free_space(fs_info, path->nodes[0]); in push_for_double_split()
4117 ret = push_leaf_right(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4124 nritems = btrfs_header_nritems(path->nodes[0]); in push_for_double_split()
4129 if (path->slots[0] == 0 || path->slots[0] == nritems) in push_for_double_split()
4132 if (btrfs_leaf_free_space(fs_info, path->nodes[0]) >= data_size) in push_for_double_split()
4136 slot = path->slots[0]; in push_for_double_split()
4139 space_needed -= btrfs_leaf_free_space(fs_info, path->nodes[0]); in push_for_double_split()
4140 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
4161 struct btrfs_path *path, int data_size, in split_leaf() argument
4177 l = path->nodes[0]; in split_leaf()
4178 slot = path->slots[0]; in split_leaf()
4184 if (data_size && path->nodes[1]) { in split_leaf()
4190 wret = push_leaf_right(trans, root, path, space_needed, in split_leaf()
4199 wret = push_leaf_left(trans, root, path, space_needed, in split_leaf()
4204 l = path->nodes[0]; in split_leaf()
4211 if (!path->nodes[1]) { in split_leaf()
4212 ret = insert_new_root(trans, root, path, 1); in split_leaf()
4218 l = path->nodes[0]; in split_leaf()
4219 slot = path->slots[0]; in split_leaf()
4275 insert_ptr(trans, fs_info, path, &disk_key, in split_leaf()
4276 right->start, path->slots[1] + 1, 1); in split_leaf()
4277 btrfs_tree_unlock(path->nodes[0]); in split_leaf()
4278 free_extent_buffer(path->nodes[0]); in split_leaf()
4279 path->nodes[0] = right; in split_leaf()
4280 path->slots[0] = 0; in split_leaf()
4281 path->slots[1] += 1; in split_leaf()
4284 insert_ptr(trans, fs_info, path, &disk_key, in split_leaf()
4285 right->start, path->slots[1], 1); in split_leaf()
4286 btrfs_tree_unlock(path->nodes[0]); in split_leaf()
4287 free_extent_buffer(path->nodes[0]); in split_leaf()
4288 path->nodes[0] = right; in split_leaf()
4289 path->slots[0] = 0; in split_leaf()
4290 if (path->slots[1] == 0) in split_leaf()
4291 fixup_low_keys(path, &disk_key, 1); in split_leaf()
4301 copy_for_split(trans, fs_info, path, l, right, slot, mid, nritems); in split_leaf()
4312 push_for_double_split(trans, root, path, data_size); in split_leaf()
4314 if (btrfs_leaf_free_space(fs_info, path->nodes[0]) >= data_size) in split_leaf()
4321 struct btrfs_path *path, int ins_len) in setup_leaf_for_split() argument
4331 leaf = path->nodes[0]; in setup_leaf_for_split()
4332 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in setup_leaf_for_split()
4340 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in setup_leaf_for_split()
4342 fi = btrfs_item_ptr(leaf, path->slots[0], in setup_leaf_for_split()
4346 btrfs_release_path(path); in setup_leaf_for_split()
4348 path->keep_locks = 1; in setup_leaf_for_split()
4349 path->search_for_split = 1; in setup_leaf_for_split()
4350 ret = btrfs_search_slot(trans, root, &key, path, 0, 1); in setup_leaf_for_split()
4351 path->search_for_split = 0; in setup_leaf_for_split()
4358 leaf = path->nodes[0]; in setup_leaf_for_split()
4360 if (item_size != btrfs_item_size_nr(leaf, path->slots[0])) in setup_leaf_for_split()
4364 if (btrfs_leaf_free_space(fs_info, path->nodes[0]) >= ins_len) in setup_leaf_for_split()
4368 fi = btrfs_item_ptr(leaf, path->slots[0], in setup_leaf_for_split()
4374 btrfs_set_path_blocking(path); in setup_leaf_for_split()
4375 ret = split_leaf(trans, root, &key, path, ins_len, 1); in setup_leaf_for_split()
4379 path->keep_locks = 0; in setup_leaf_for_split()
4380 btrfs_unlock_up_safe(path, 1); in setup_leaf_for_split()
4383 path->keep_locks = 0; in setup_leaf_for_split()
4388 struct btrfs_path *path, in split_item() argument
4402 leaf = path->nodes[0]; in split_item()
4405 btrfs_set_path_blocking(path); in split_item()
4407 item = btrfs_item_nr(path->slots[0]); in split_item()
4416 path->slots[0]), item_size); in split_item()
4418 slot = path->slots[0] + 1; in split_item()
4443 btrfs_item_ptr_offset(leaf, path->slots[0]), in split_item()
4474 struct btrfs_path *path, in btrfs_split_item() argument
4479 ret = setup_leaf_for_split(trans, root, path, in btrfs_split_item()
4484 ret = split_item(root->fs_info, path, new_key, split_offset); in btrfs_split_item()
4498 struct btrfs_path *path, in btrfs_duplicate_item() argument
4505 leaf = path->nodes[0]; in btrfs_duplicate_item()
4506 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in btrfs_duplicate_item()
4507 ret = setup_leaf_for_split(trans, root, path, in btrfs_duplicate_item()
4512 path->slots[0]++; in btrfs_duplicate_item()
4513 setup_items_for_insert(root, path, new_key, &item_size, in btrfs_duplicate_item()
4516 leaf = path->nodes[0]; in btrfs_duplicate_item()
4518 btrfs_item_ptr_offset(leaf, path->slots[0]), in btrfs_duplicate_item()
4519 btrfs_item_ptr_offset(leaf, path->slots[0] - 1), in btrfs_duplicate_item()
4531 struct btrfs_path *path, u32 new_size, int from_end) in btrfs_truncate_item() argument
4546 leaf = path->nodes[0]; in btrfs_truncate_item()
4547 slot = path->slots[0]; in btrfs_truncate_item()
4613 fixup_low_keys(path, &disk_key, 1); in btrfs_truncate_item()
4629 void btrfs_extend_item(struct btrfs_fs_info *fs_info, struct btrfs_path *path, in btrfs_extend_item() argument
4644 leaf = path->nodes[0]; in btrfs_extend_item()
4653 slot = path->slots[0]; in btrfs_extend_item()
4699 void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path, in setup_items_for_insert() argument
4713 if (path->slots[0] == 0) { in setup_items_for_insert()
4715 fixup_low_keys(path, &disk_key, 1); in setup_items_for_insert()
4717 btrfs_unlock_up_safe(path, 1); in setup_items_for_insert()
4721 leaf = path->nodes[0]; in setup_items_for_insert()
4722 slot = path->slots[0]; in setup_items_for_insert()
4793 struct btrfs_path *path, in btrfs_insert_empty_items() argument
4807 ret = btrfs_search_slot(trans, root, cpu_key, path, total_size, 1); in btrfs_insert_empty_items()
4813 slot = path->slots[0]; in btrfs_insert_empty_items()
4816 setup_items_for_insert(root, path, cpu_key, data_size, in btrfs_insert_empty_items()
4830 struct btrfs_path *path; in btrfs_insert_item() local
4834 path = btrfs_alloc_path(); in btrfs_insert_item()
4835 if (!path) in btrfs_insert_item()
4837 ret = btrfs_insert_empty_item(trans, root, path, cpu_key, data_size); in btrfs_insert_item()
4839 leaf = path->nodes[0]; in btrfs_insert_item()
4840 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]); in btrfs_insert_item()
4844 btrfs_free_path(path); in btrfs_insert_item()
4854 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path, in del_ptr() argument
4857 struct extent_buffer *parent = path->nodes[level]; in del_ptr()
4889 fixup_low_keys(path, &disk_key, level + 1); in del_ptr()
4906 struct btrfs_path *path, in btrfs_del_leaf() argument
4910 del_ptr(root, path, 1, path->slots[1]); in btrfs_del_leaf()
4916 btrfs_unlock_up_safe(path, 0); in btrfs_del_leaf()
4929 struct btrfs_path *path, int slot, int nr) in btrfs_del_items() argument
4944 leaf = path->nodes[0]; in btrfs_del_items()
4982 btrfs_set_path_blocking(path); in btrfs_del_items()
4984 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
4992 fixup_low_keys(path, &disk_key, 1); in btrfs_del_items()
5001 slot = path->slots[1]; in btrfs_del_items()
5004 btrfs_set_path_blocking(path); in btrfs_del_items()
5005 wret = push_leaf_left(trans, root, path, 1, 1, in btrfs_del_items()
5010 if (path->nodes[0] == leaf && in btrfs_del_items()
5012 wret = push_leaf_right(trans, root, path, 1, in btrfs_del_items()
5019 path->slots[1] = slot; in btrfs_del_items()
5020 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
5029 if (path->nodes[0] == leaf) in btrfs_del_items()
5048 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_prev_leaf() argument
5054 btrfs_item_key_to_cpu(path->nodes[0], &key, 0); in btrfs_prev_leaf()
5069 btrfs_release_path(path); in btrfs_prev_leaf()
5070 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_prev_leaf()
5073 btrfs_item_key(path->nodes[0], &found_key, 0); in btrfs_prev_leaf()
5110 struct btrfs_path *path, in btrfs_search_forward() argument
5121 int keep_locks = path->keep_locks; in btrfs_search_forward()
5123 path->keep_locks = 1; in btrfs_search_forward()
5127 WARN_ON(path->nodes[level]); in btrfs_search_forward()
5128 path->nodes[level] = cur; in btrfs_search_forward()
5129 path->locks[level] = BTRFS_READ_LOCK; in btrfs_search_forward()
5141 if (level == path->lowest_level) { in btrfs_search_forward()
5145 path->slots[level] = slot; in btrfs_search_forward()
5171 path->slots[level] = slot; in btrfs_search_forward()
5172 btrfs_set_path_blocking(path); in btrfs_search_forward()
5173 sret = btrfs_find_next_key(root, path, min_key, level, in btrfs_search_forward()
5176 btrfs_release_path(path); in btrfs_search_forward()
5184 path->slots[level] = slot; in btrfs_search_forward()
5185 if (level == path->lowest_level) { in btrfs_search_forward()
5189 btrfs_set_path_blocking(path); in btrfs_search_forward()
5198 path->locks[level - 1] = BTRFS_READ_LOCK; in btrfs_search_forward()
5199 path->nodes[level - 1] = cur; in btrfs_search_forward()
5200 unlock_up(path, level, 1, 0, NULL); in btrfs_search_forward()
5201 btrfs_clear_path_blocking(path, NULL, 0); in btrfs_search_forward()
5204 path->keep_locks = keep_locks; in btrfs_search_forward()
5206 btrfs_unlock_up_safe(path, path->lowest_level + 1); in btrfs_search_forward()
5207 btrfs_set_path_blocking(path); in btrfs_search_forward()
5214 struct btrfs_path *path, in tree_move_down() argument
5220 eb = read_node_slot(fs_info, path->nodes[*level], path->slots[*level]); in tree_move_down()
5224 path->nodes[*level - 1] = eb; in tree_move_down()
5225 path->slots[*level - 1] = 0; in tree_move_down()
5230 static int tree_move_next_or_upnext(struct btrfs_path *path, in tree_move_next_or_upnext() argument
5235 nritems = btrfs_header_nritems(path->nodes[*level]); in tree_move_next_or_upnext()
5237 path->slots[*level]++; in tree_move_next_or_upnext()
5239 while (path->slots[*level] >= nritems) { in tree_move_next_or_upnext()
5244 path->slots[*level] = 0; in tree_move_next_or_upnext()
5245 free_extent_buffer(path->nodes[*level]); in tree_move_next_or_upnext()
5246 path->nodes[*level] = NULL; in tree_move_next_or_upnext()
5248 path->slots[*level]++; in tree_move_next_or_upnext()
5250 nritems = btrfs_header_nritems(path->nodes[*level]); in tree_move_next_or_upnext()
5261 struct btrfs_path *path, in tree_advance() argument
5269 ret = tree_move_next_or_upnext(path, level, root_level); in tree_advance()
5271 ret = tree_move_down(fs_info, path, level); in tree_advance()
5275 btrfs_item_key_to_cpu(path->nodes[*level], key, in tree_advance()
5276 path->slots[*level]); in tree_advance()
5278 btrfs_node_key_to_cpu(path->nodes[*level], key, in tree_advance()
5279 path->slots[*level]); in tree_advance()
5591 int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, in btrfs_find_next_key() argument
5597 WARN_ON(!path->keep_locks); in btrfs_find_next_key()
5599 if (!path->nodes[level]) in btrfs_find_next_key()
5602 slot = path->slots[level] + 1; in btrfs_find_next_key()
5603 c = path->nodes[level]; in btrfs_find_next_key()
5610 !path->nodes[level + 1]) in btrfs_find_next_key()
5613 if (path->locks[level + 1]) { in btrfs_find_next_key()
5624 orig_lowest = path->lowest_level; in btrfs_find_next_key()
5625 btrfs_release_path(path); in btrfs_find_next_key()
5626 path->lowest_level = level; in btrfs_find_next_key()
5627 ret = btrfs_search_slot(NULL, root, &cur_key, path, in btrfs_find_next_key()
5629 path->lowest_level = orig_lowest; in btrfs_find_next_key()
5633 c = path->nodes[level]; in btrfs_find_next_key()
5634 slot = path->slots[level]; in btrfs_find_next_key()
5661 int btrfs_next_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_next_leaf() argument
5663 return btrfs_next_old_leaf(root, path, 0); in btrfs_next_leaf()
5666 int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, in btrfs_next_old_leaf() argument
5676 int old_spinning = path->leave_spinning; in btrfs_next_old_leaf()
5679 nritems = btrfs_header_nritems(path->nodes[0]); in btrfs_next_old_leaf()
5683 btrfs_item_key_to_cpu(path->nodes[0], &key, nritems - 1); in btrfs_next_old_leaf()
5688 btrfs_release_path(path); in btrfs_next_old_leaf()
5690 path->keep_locks = 1; in btrfs_next_old_leaf()
5691 path->leave_spinning = 1; in btrfs_next_old_leaf()
5694 ret = btrfs_search_old_slot(root, &key, path, time_seq); in btrfs_next_old_leaf()
5696 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_next_old_leaf()
5697 path->keep_locks = 0; in btrfs_next_old_leaf()
5702 nritems = btrfs_header_nritems(path->nodes[0]); in btrfs_next_old_leaf()
5709 if (nritems > 0 && path->slots[0] < nritems - 1) { in btrfs_next_old_leaf()
5711 path->slots[0]++; in btrfs_next_old_leaf()
5729 if (nritems > 0 && ret > 0 && path->slots[0] == nritems - 1) { in btrfs_next_old_leaf()
5735 if (!path->nodes[level]) { in btrfs_next_old_leaf()
5740 slot = path->slots[level] + 1; in btrfs_next_old_leaf()
5741 c = path->nodes[level]; in btrfs_next_old_leaf()
5757 next_rw_lock = path->locks[level]; in btrfs_next_old_leaf()
5758 ret = read_block_for_search(root, path, &next, level, in btrfs_next_old_leaf()
5764 btrfs_release_path(path); in btrfs_next_old_leaf()
5768 if (!path->skip_locking) { in btrfs_next_old_leaf()
5779 btrfs_release_path(path); in btrfs_next_old_leaf()
5784 btrfs_set_path_blocking(path); in btrfs_next_old_leaf()
5786 btrfs_clear_path_blocking(path, next, in btrfs_next_old_leaf()
5793 path->slots[level] = slot; in btrfs_next_old_leaf()
5796 c = path->nodes[level]; in btrfs_next_old_leaf()
5797 if (path->locks[level]) in btrfs_next_old_leaf()
5798 btrfs_tree_unlock_rw(c, path->locks[level]); in btrfs_next_old_leaf()
5801 path->nodes[level] = next; in btrfs_next_old_leaf()
5802 path->slots[level] = 0; in btrfs_next_old_leaf()
5803 if (!path->skip_locking) in btrfs_next_old_leaf()
5804 path->locks[level] = next_rw_lock; in btrfs_next_old_leaf()
5808 ret = read_block_for_search(root, path, &next, level, in btrfs_next_old_leaf()
5814 btrfs_release_path(path); in btrfs_next_old_leaf()
5818 if (!path->skip_locking) { in btrfs_next_old_leaf()
5821 btrfs_set_path_blocking(path); in btrfs_next_old_leaf()
5823 btrfs_clear_path_blocking(path, next, in btrfs_next_old_leaf()
5831 unlock_up(path, 0, 1, 0, NULL); in btrfs_next_old_leaf()
5832 path->leave_spinning = old_spinning; in btrfs_next_old_leaf()
5834 btrfs_set_path_blocking(path); in btrfs_next_old_leaf()
5846 struct btrfs_path *path, u64 min_objectid, in btrfs_previous_item() argument
5855 if (path->slots[0] == 0) { in btrfs_previous_item()
5856 btrfs_set_path_blocking(path); in btrfs_previous_item()
5857 ret = btrfs_prev_leaf(root, path); in btrfs_previous_item()
5861 path->slots[0]--; in btrfs_previous_item()
5863 leaf = path->nodes[0]; in btrfs_previous_item()
5867 if (path->slots[0] == nritems) in btrfs_previous_item()
5868 path->slots[0]--; in btrfs_previous_item()
5870 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); in btrfs_previous_item()
5889 struct btrfs_path *path, u64 min_objectid) in btrfs_previous_extent_item() argument
5897 if (path->slots[0] == 0) { in btrfs_previous_extent_item()
5898 btrfs_set_path_blocking(path); in btrfs_previous_extent_item()
5899 ret = btrfs_prev_leaf(root, path); in btrfs_previous_extent_item()
5903 path->slots[0]--; in btrfs_previous_extent_item()
5905 leaf = path->nodes[0]; in btrfs_previous_extent_item()
5909 if (path->slots[0] == nritems) in btrfs_previous_extent_item()
5910 path->slots[0]--; in btrfs_previous_extent_item()
5912 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); in btrfs_previous_extent_item()