Lines Matching refs:path
21 *root, struct btrfs_path *path, int level);
23 const struct btrfs_key *ins_key, struct btrfs_path *path,
31 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path,
861 struct btrfs_path *path, int level) in balance_level() argument
871 int orig_slot = path->slots[level]; in balance_level()
876 mid = path->nodes[level]; in balance_level()
878 WARN_ON(path->locks[level] != BTRFS_WRITE_LOCK); in balance_level()
884 parent = path->nodes[level + 1]; in balance_level()
885 pslot = path->slots[level + 1]; in balance_level()
922 path->locks[level] = 0; in balance_level()
923 path->nodes[level] = NULL; in balance_level()
987 del_ptr(root, path, level + 1, pslot + 1); in balance_level()
1033 del_ptr(root, path, level + 1, pslot); in balance_level()
1054 path->nodes[level] = left; in balance_level()
1055 path->slots[level + 1] -= 1; in balance_level()
1056 path->slots[level] = orig_slot; in balance_level()
1063 path->slots[level] = orig_slot; in balance_level()
1068 btrfs_node_blockptr(path->nodes[level], path->slots[level])) in balance_level()
1076 if (path->nodes[level] != left) in balance_level()
1089 struct btrfs_path *path, int level) in push_nodes_for_insert() argument
1099 int orig_slot = path->slots[level]; in push_nodes_for_insert()
1104 mid = path->nodes[level]; in push_nodes_for_insert()
1108 parent = path->nodes[level + 1]; in push_nodes_for_insert()
1109 pslot = path->slots[level + 1]; in push_nodes_for_insert()
1150 path->nodes[level] = left; in push_nodes_for_insert()
1151 path->slots[level + 1] -= 1; in push_nodes_for_insert()
1152 path->slots[level] = orig_slot; in push_nodes_for_insert()
1158 path->slots[level] = orig_slot; in push_nodes_for_insert()
1205 path->nodes[level] = right; in push_nodes_for_insert()
1206 path->slots[level + 1] += 1; in push_nodes_for_insert()
1207 path->slots[level] = orig_slot - in push_nodes_for_insert()
1228 struct btrfs_path *path, in reada_for_search() argument
1242 if (level != 1 && path->reada != READA_FORWARD_ALWAYS) in reada_for_search()
1245 if (!path->nodes[level]) in reada_for_search()
1248 node = path->nodes[level]; in reada_for_search()
1255 if (path->reada == READA_FORWARD_ALWAYS) { in reada_for_search()
1266 if (path->reada != READA_FORWARD_ALWAYS) { in reada_for_search()
1282 if (path->reada == READA_BACK) { in reada_for_search()
1286 } else if (path->reada == READA_FORWARD || in reada_for_search()
1287 path->reada == READA_FORWARD_ALWAYS) { in reada_for_search()
1292 if (path->reada == READA_BACK && objectid) { in reada_for_search()
1298 if (path->reada == READA_FORWARD_ALWAYS || in reada_for_search()
1310 static noinline void reada_for_balance(struct btrfs_path *path, int level) in reada_for_balance() argument
1316 parent = path->nodes[level + 1]; in reada_for_balance()
1321 slot = path->slots[level + 1]; in reada_for_balance()
1343 static noinline void unlock_up(struct btrfs_path *path, int level, in unlock_up() argument
1353 if (!path->nodes[i]) in unlock_up()
1355 if (!path->locks[i]) in unlock_up()
1357 if (!no_skips && path->slots[i] == 0) { in unlock_up()
1361 if (!no_skips && path->keep_locks) { in unlock_up()
1363 t = path->nodes[i]; in unlock_up()
1365 if (nritems < 1 || path->slots[i] >= nritems - 1) { in unlock_up()
1373 t = path->nodes[i]; in unlock_up()
1375 btrfs_tree_unlock_rw(t, path->locks[i]); in unlock_up()
1376 path->locks[i] = 0; in unlock_up()
1532 int btrfs_find_item(struct btrfs_root *fs_root, struct btrfs_path *path, in btrfs_find_item() argument
1540 ASSERT(path); in btrfs_find_item()
1547 ret = btrfs_search_slot(NULL, fs_root, &key, path, 0, 0); in btrfs_find_item()
1551 eb = path->nodes[0]; in btrfs_find_item()
1552 if (ret && path->slots[0] >= btrfs_header_nritems(eb)) { in btrfs_find_item()
1553 ret = btrfs_next_leaf(fs_root, path); in btrfs_find_item()
1556 eb = path->nodes[0]; in btrfs_find_item()
1559 btrfs_item_key_to_cpu(eb, found_key, path->slots[0]); in btrfs_find_item()
2113 struct btrfs_path *path) in btrfs_search_backwards() argument
2117 ret = btrfs_search_slot(NULL, root, key, path, 0, 0); in btrfs_search_backwards()
2119 ret = btrfs_previous_item(root, path, key->objectid, key->type); in btrfs_search_backwards()
2122 btrfs_item_key_to_cpu(path->nodes[0], key, path->slots[0]); in btrfs_search_backwards()
2135 static void fixup_low_keys(struct btrfs_path *path, in fixup_low_keys() argument
2143 int tslot = path->slots[i]; in fixup_low_keys()
2145 if (!path->nodes[i]) in fixup_low_keys()
2147 t = path->nodes[i]; in fixup_low_keys()
2152 btrfs_mark_buffer_dirty(path->nodes[i]); in fixup_low_keys()
2165 struct btrfs_path *path, in btrfs_set_item_key_safe() argument
2172 eb = path->nodes[0]; in btrfs_set_item_key_safe()
2173 slot = path->slots[0]; in btrfs_set_item_key_safe()
2207 fixup_low_keys(path, &disk_key, 1); in btrfs_set_item_key_safe()
2422 struct btrfs_path *path, int level) in insert_new_root() argument
2432 BUG_ON(path->nodes[level]); in insert_new_root()
2433 BUG_ON(path->nodes[level-1] != root->node); in insert_new_root()
2435 lower = path->nodes[level-1]; in insert_new_root()
2469 path->nodes[level] = c; in insert_new_root()
2470 path->locks[level] = BTRFS_WRITE_LOCK; in insert_new_root()
2471 path->slots[level] = 0; in insert_new_root()
2483 struct btrfs_path *path, in insert_ptr() argument
2491 BUG_ON(!path->nodes[level]); in insert_ptr()
2492 btrfs_assert_tree_write_locked(path->nodes[level]); in insert_ptr()
2493 lower = path->nodes[level]; in insert_ptr()
2532 struct btrfs_path *path, int level) in split_node() argument
2542 c = path->nodes[level]; in split_node()
2555 ret = insert_new_root(trans, root, path, level + 1); in split_node()
2559 ret = push_nodes_for_insert(trans, root, path, level); in split_node()
2560 c = path->nodes[level]; in split_node()
2596 insert_ptr(trans, path, &disk_key, split->start, in split_node()
2597 path->slots[level + 1] + 1, level + 1); in split_node()
2599 if (path->slots[level] >= mid) { in split_node()
2600 path->slots[level] -= mid; in split_node()
2603 path->nodes[level] = split; in split_node()
2604 path->slots[level + 1] += 1; in split_node()
2663 static noinline int __push_leaf_right(struct btrfs_path *path, in __push_leaf_right() argument
2670 struct extent_buffer *left = path->nodes[0]; in __push_leaf_right()
2671 struct extent_buffer *upper = path->nodes[1]; in __push_leaf_right()
2689 if (path->slots[0] >= left_nritems) in __push_leaf_right()
2692 slot = path->slots[1]; in __push_leaf_right()
2698 if (path->slots[0] > i) in __push_leaf_right()
2700 if (path->slots[0] == i) { in __push_leaf_right()
2708 if (path->slots[0] == i) in __push_leaf_right()
2781 if (path->slots[0] >= left_nritems) { in __push_leaf_right()
2782 path->slots[0] -= left_nritems; in __push_leaf_right()
2783 if (btrfs_header_nritems(path->nodes[0]) == 0) in __push_leaf_right()
2784 btrfs_clean_tree_block(path->nodes[0]); in __push_leaf_right()
2785 btrfs_tree_unlock(path->nodes[0]); in __push_leaf_right()
2786 free_extent_buffer(path->nodes[0]); in __push_leaf_right()
2787 path->nodes[0] = right; in __push_leaf_right()
2788 path->slots[1] += 1; in __push_leaf_right()
2812 *root, struct btrfs_path *path, in push_leaf_right() argument
2816 struct extent_buffer *left = path->nodes[0]; in push_leaf_right()
2824 if (!path->nodes[1]) in push_leaf_right()
2827 slot = path->slots[1]; in push_leaf_right()
2828 upper = path->nodes[1]; in push_leaf_right()
2832 btrfs_assert_tree_write_locked(path->nodes[1]); in push_leaf_right()
2868 if (path->slots[0] == left_nritems && !empty) { in push_leaf_right()
2875 path->nodes[0] = right; in push_leaf_right()
2876 path->slots[0] = 0; in push_leaf_right()
2877 path->slots[1]++; in push_leaf_right()
2881 return __push_leaf_right(path, min_data_size, empty, in push_leaf_right()
2897 static noinline int __push_leaf_left(struct btrfs_path *path, int data_size, in __push_leaf_left() argument
2904 struct extent_buffer *right = path->nodes[0]; in __push_leaf_left()
2925 if (path->slots[0] < i) in __push_leaf_left()
2927 if (path->slots[0] == i) { in __push_leaf_left()
2935 if (path->slots[0] == i) in __push_leaf_left()
3019 fixup_low_keys(path, &disk_key, 1); in __push_leaf_left()
3022 if (path->slots[0] < push_items) { in __push_leaf_left()
3023 path->slots[0] += old_left_nritems; in __push_leaf_left()
3024 btrfs_tree_unlock(path->nodes[0]); in __push_leaf_left()
3025 free_extent_buffer(path->nodes[0]); in __push_leaf_left()
3026 path->nodes[0] = left; in __push_leaf_left()
3027 path->slots[1] -= 1; in __push_leaf_left()
3031 path->slots[0] -= push_items; in __push_leaf_left()
3033 BUG_ON(path->slots[0] < 0); in __push_leaf_left()
3050 *root, struct btrfs_path *path, int min_data_size, in push_leaf_left() argument
3053 struct extent_buffer *right = path->nodes[0]; in push_leaf_left()
3060 slot = path->slots[1]; in push_leaf_left()
3063 if (!path->nodes[1]) in push_leaf_left()
3070 btrfs_assert_tree_write_locked(path->nodes[1]); in push_leaf_left()
3072 left = btrfs_read_node_slot(path->nodes[1], slot - 1); in push_leaf_left()
3090 path->nodes[1], slot - 1, &left, in push_leaf_left()
3109 return __push_leaf_left(path, min_data_size, in push_leaf_left()
3123 struct btrfs_path *path, in copy_for_split() argument
3161 insert_ptr(trans, path, &disk_key, right->start, path->slots[1] + 1, 1); in copy_for_split()
3165 BUG_ON(path->slots[0] != slot); in copy_for_split()
3168 btrfs_tree_unlock(path->nodes[0]); in copy_for_split()
3169 free_extent_buffer(path->nodes[0]); in copy_for_split()
3170 path->nodes[0] = right; in copy_for_split()
3171 path->slots[0] -= mid; in copy_for_split()
3172 path->slots[1] += 1; in copy_for_split()
3178 BUG_ON(path->slots[0] < 0); in copy_for_split()
3193 struct btrfs_path *path, in push_for_double_split() argument
3202 slot = path->slots[0]; in push_for_double_split()
3203 if (slot < btrfs_header_nritems(path->nodes[0])) in push_for_double_split()
3204 space_needed -= btrfs_leaf_free_space(path->nodes[0]); in push_for_double_split()
3210 ret = push_leaf_right(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
3217 nritems = btrfs_header_nritems(path->nodes[0]); in push_for_double_split()
3222 if (path->slots[0] == 0 || path->slots[0] == nritems) in push_for_double_split()
3225 if (btrfs_leaf_free_space(path->nodes[0]) >= data_size) in push_for_double_split()
3229 slot = path->slots[0]; in push_for_double_split()
3232 space_needed -= btrfs_leaf_free_space(path->nodes[0]); in push_for_double_split()
3233 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
3254 struct btrfs_path *path, int data_size, in split_leaf() argument
3270 l = path->nodes[0]; in split_leaf()
3271 slot = path->slots[0]; in split_leaf()
3277 if (data_size && path->nodes[1]) { in split_leaf()
3283 wret = push_leaf_right(trans, root, path, space_needed, in split_leaf()
3291 wret = push_leaf_left(trans, root, path, space_needed, in split_leaf()
3296 l = path->nodes[0]; in split_leaf()
3303 if (!path->nodes[1]) { in split_leaf()
3304 ret = insert_new_root(trans, root, path, 1); in split_leaf()
3310 l = path->nodes[0]; in split_leaf()
3311 slot = path->slots[0]; in split_leaf()
3377 insert_ptr(trans, path, &disk_key, in split_leaf()
3378 right->start, path->slots[1] + 1, 1); in split_leaf()
3379 btrfs_tree_unlock(path->nodes[0]); in split_leaf()
3380 free_extent_buffer(path->nodes[0]); in split_leaf()
3381 path->nodes[0] = right; in split_leaf()
3382 path->slots[0] = 0; in split_leaf()
3383 path->slots[1] += 1; in split_leaf()
3386 insert_ptr(trans, path, &disk_key, in split_leaf()
3387 right->start, path->slots[1], 1); in split_leaf()
3388 btrfs_tree_unlock(path->nodes[0]); in split_leaf()
3389 free_extent_buffer(path->nodes[0]); in split_leaf()
3390 path->nodes[0] = right; in split_leaf()
3391 path->slots[0] = 0; in split_leaf()
3392 if (path->slots[1] == 0) in split_leaf()
3393 fixup_low_keys(path, &disk_key, 1); in split_leaf()
3403 copy_for_split(trans, path, l, right, slot, mid, nritems); in split_leaf()
3414 push_for_double_split(trans, root, path, data_size); in split_leaf()
3416 if (btrfs_leaf_free_space(path->nodes[0]) >= data_size) in split_leaf()
3423 struct btrfs_path *path, int ins_len) in setup_leaf_for_split() argument
3432 leaf = path->nodes[0]; in setup_leaf_for_split()
3433 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in setup_leaf_for_split()
3441 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in setup_leaf_for_split()
3443 fi = btrfs_item_ptr(leaf, path->slots[0], in setup_leaf_for_split()
3447 btrfs_release_path(path); in setup_leaf_for_split()
3449 path->keep_locks = 1; in setup_leaf_for_split()
3450 path->search_for_split = 1; in setup_leaf_for_split()
3451 ret = btrfs_search_slot(trans, root, &key, path, 0, 1); in setup_leaf_for_split()
3452 path->search_for_split = 0; in setup_leaf_for_split()
3459 leaf = path->nodes[0]; in setup_leaf_for_split()
3461 if (item_size != btrfs_item_size_nr(leaf, path->slots[0])) in setup_leaf_for_split()
3465 if (btrfs_leaf_free_space(path->nodes[0]) >= ins_len) in setup_leaf_for_split()
3469 fi = btrfs_item_ptr(leaf, path->slots[0], in setup_leaf_for_split()
3475 ret = split_leaf(trans, root, &key, path, ins_len, 1); in setup_leaf_for_split()
3479 path->keep_locks = 0; in setup_leaf_for_split()
3480 btrfs_unlock_up_safe(path, 1); in setup_leaf_for_split()
3483 path->keep_locks = 0; in setup_leaf_for_split()
3487 static noinline int split_item(struct btrfs_path *path, in split_item() argument
3501 leaf = path->nodes[0]; in split_item()
3504 item = btrfs_item_nr(path->slots[0]); in split_item()
3513 path->slots[0]), item_size); in split_item()
3515 slot = path->slots[0] + 1; in split_item()
3540 btrfs_item_ptr_offset(leaf, path->slots[0]), in split_item()
3571 struct btrfs_path *path, in btrfs_split_item() argument
3576 ret = setup_leaf_for_split(trans, root, path, in btrfs_split_item()
3581 ret = split_item(path, new_key, split_offset); in btrfs_split_item()
3591 void btrfs_truncate_item(struct btrfs_path *path, u32 new_size, int from_end) in btrfs_truncate_item() argument
3604 leaf = path->nodes[0]; in btrfs_truncate_item()
3605 slot = path->slots[0]; in btrfs_truncate_item()
3671 fixup_low_keys(path, &disk_key, 1); in btrfs_truncate_item()
3687 void btrfs_extend_item(struct btrfs_path *path, u32 data_size) in btrfs_extend_item() argument
3699 leaf = path->nodes[0]; in btrfs_extend_item()
3708 slot = path->slots[0]; in btrfs_extend_item()
3758 static void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path, in setup_items_for_insert() argument
3777 if (path->slots[0] == 0) { in setup_items_for_insert()
3779 fixup_low_keys(path, &disk_key, 1); in setup_items_for_insert()
3781 btrfs_unlock_up_safe(path, 1); in setup_items_for_insert()
3783 leaf = path->nodes[0]; in setup_items_for_insert()
3784 slot = path->slots[0]; in setup_items_for_insert()
3861 struct btrfs_path *path, in btrfs_setup_item_for_insert() argument
3872 setup_items_for_insert(root, path, &batch); in btrfs_setup_item_for_insert()
3881 struct btrfs_path *path, in btrfs_insert_empty_items() argument
3889 ret = btrfs_search_slot(trans, root, &batch->keys[0], path, total_size, 1); in btrfs_insert_empty_items()
3895 slot = path->slots[0]; in btrfs_insert_empty_items()
3898 setup_items_for_insert(root, path, batch); in btrfs_insert_empty_items()
3911 struct btrfs_path *path; in btrfs_insert_item() local
3915 path = btrfs_alloc_path(); in btrfs_insert_item()
3916 if (!path) in btrfs_insert_item()
3918 ret = btrfs_insert_empty_item(trans, root, path, cpu_key, data_size); in btrfs_insert_item()
3920 leaf = path->nodes[0]; in btrfs_insert_item()
3921 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]); in btrfs_insert_item()
3925 btrfs_free_path(path); in btrfs_insert_item()
3939 struct btrfs_path *path, in btrfs_duplicate_item() argument
3946 leaf = path->nodes[0]; in btrfs_duplicate_item()
3947 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in btrfs_duplicate_item()
3948 ret = setup_leaf_for_split(trans, root, path, in btrfs_duplicate_item()
3953 path->slots[0]++; in btrfs_duplicate_item()
3954 btrfs_setup_item_for_insert(root, path, new_key, item_size); in btrfs_duplicate_item()
3955 leaf = path->nodes[0]; in btrfs_duplicate_item()
3957 btrfs_item_ptr_offset(leaf, path->slots[0]), in btrfs_duplicate_item()
3958 btrfs_item_ptr_offset(leaf, path->slots[0] - 1), in btrfs_duplicate_item()
3969 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path, in del_ptr() argument
3972 struct extent_buffer *parent = path->nodes[level]; in del_ptr()
4004 fixup_low_keys(path, &disk_key, level + 1); in del_ptr()
4021 struct btrfs_path *path, in btrfs_del_leaf() argument
4025 del_ptr(root, path, 1, path->slots[1]); in btrfs_del_leaf()
4031 btrfs_unlock_up_safe(path, 0); in btrfs_del_leaf()
4044 struct btrfs_path *path, int slot, int nr) in btrfs_del_items() argument
4056 leaf = path->nodes[0]; in btrfs_del_items()
4096 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
4104 fixup_low_keys(path, &disk_key, 1); in btrfs_del_items()
4113 slot = path->slots[1]; in btrfs_del_items()
4116 wret = push_leaf_left(trans, root, path, 1, 1, in btrfs_del_items()
4121 if (path->nodes[0] == leaf && in btrfs_del_items()
4123 wret = push_leaf_right(trans, root, path, 1, in btrfs_del_items()
4130 path->slots[1] = slot; in btrfs_del_items()
4131 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
4140 if (path->nodes[0] == leaf) in btrfs_del_items()
4159 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_prev_leaf() argument
4165 btrfs_item_key_to_cpu(path->nodes[0], &key, 0); in btrfs_prev_leaf()
4180 btrfs_release_path(path); in btrfs_prev_leaf()
4181 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_prev_leaf()
4184 btrfs_item_key(path->nodes[0], &found_key, 0); in btrfs_prev_leaf()
4221 struct btrfs_path *path, in btrfs_search_forward() argument
4231 int keep_locks = path->keep_locks; in btrfs_search_forward()
4233 path->keep_locks = 1; in btrfs_search_forward()
4237 WARN_ON(path->nodes[level]); in btrfs_search_forward()
4238 path->nodes[level] = cur; in btrfs_search_forward()
4239 path->locks[level] = BTRFS_READ_LOCK; in btrfs_search_forward()
4255 if (level == path->lowest_level) { in btrfs_search_forward()
4259 path->slots[level] = slot; in btrfs_search_forward()
4285 path->slots[level] = slot; in btrfs_search_forward()
4286 sret = btrfs_find_next_key(root, path, min_key, level, in btrfs_search_forward()
4289 btrfs_release_path(path); in btrfs_search_forward()
4297 path->slots[level] = slot; in btrfs_search_forward()
4298 if (level == path->lowest_level) { in btrfs_search_forward()
4310 path->locks[level - 1] = BTRFS_READ_LOCK; in btrfs_search_forward()
4311 path->nodes[level - 1] = cur; in btrfs_search_forward()
4312 unlock_up(path, level, 1, 0, NULL); in btrfs_search_forward()
4315 path->keep_locks = keep_locks; in btrfs_search_forward()
4317 btrfs_unlock_up_safe(path, path->lowest_level + 1); in btrfs_search_forward()
4334 int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, in btrfs_find_next_key() argument
4340 WARN_ON(!path->keep_locks && !path->skip_locking); in btrfs_find_next_key()
4342 if (!path->nodes[level]) in btrfs_find_next_key()
4345 slot = path->slots[level] + 1; in btrfs_find_next_key()
4346 c = path->nodes[level]; in btrfs_find_next_key()
4353 !path->nodes[level + 1]) in btrfs_find_next_key()
4356 if (path->locks[level + 1] || path->skip_locking) { in btrfs_find_next_key()
4367 orig_lowest = path->lowest_level; in btrfs_find_next_key()
4368 btrfs_release_path(path); in btrfs_find_next_key()
4369 path->lowest_level = level; in btrfs_find_next_key()
4370 ret = btrfs_search_slot(NULL, root, &cur_key, path, in btrfs_find_next_key()
4372 path->lowest_level = orig_lowest; in btrfs_find_next_key()
4376 c = path->nodes[level]; in btrfs_find_next_key()
4377 slot = path->slots[level]; in btrfs_find_next_key()
4399 int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, in btrfs_next_old_leaf() argument
4411 nritems = btrfs_header_nritems(path->nodes[0]); in btrfs_next_old_leaf()
4415 btrfs_item_key_to_cpu(path->nodes[0], &key, nritems - 1); in btrfs_next_old_leaf()
4419 btrfs_release_path(path); in btrfs_next_old_leaf()
4421 path->keep_locks = 1; in btrfs_next_old_leaf()
4424 ret = btrfs_search_old_slot(root, &key, path, time_seq); in btrfs_next_old_leaf()
4426 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_next_old_leaf()
4427 path->keep_locks = 0; in btrfs_next_old_leaf()
4432 nritems = btrfs_header_nritems(path->nodes[0]); in btrfs_next_old_leaf()
4439 if (nritems > 0 && path->slots[0] < nritems - 1) { in btrfs_next_old_leaf()
4441 path->slots[0]++; in btrfs_next_old_leaf()
4459 if (nritems > 0 && ret > 0 && path->slots[0] == nritems - 1) { in btrfs_next_old_leaf()
4465 if (!path->nodes[level]) { in btrfs_next_old_leaf()
4470 slot = path->slots[level] + 1; in btrfs_next_old_leaf()
4471 c = path->nodes[level]; in btrfs_next_old_leaf()
4488 if (path->locks[level]) { in btrfs_next_old_leaf()
4489 btrfs_tree_read_unlock(path->nodes[i]); in btrfs_next_old_leaf()
4490 path->locks[i] = 0; in btrfs_next_old_leaf()
4492 free_extent_buffer(path->nodes[i]); in btrfs_next_old_leaf()
4493 path->nodes[i] = NULL; in btrfs_next_old_leaf()
4497 ret = read_block_for_search(root, path, &next, level, in btrfs_next_old_leaf()
4503 btrfs_release_path(path); in btrfs_next_old_leaf()
4507 if (!path->skip_locking) { in btrfs_next_old_leaf()
4518 btrfs_release_path(path); in btrfs_next_old_leaf()
4527 path->slots[level] = slot; in btrfs_next_old_leaf()
4530 path->nodes[level] = next; in btrfs_next_old_leaf()
4531 path->slots[level] = 0; in btrfs_next_old_leaf()
4532 if (!path->skip_locking) in btrfs_next_old_leaf()
4533 path->locks[level] = BTRFS_READ_LOCK; in btrfs_next_old_leaf()
4537 ret = read_block_for_search(root, path, &next, level, in btrfs_next_old_leaf()
4543 btrfs_release_path(path); in btrfs_next_old_leaf()
4547 if (!path->skip_locking) in btrfs_next_old_leaf()
4552 unlock_up(path, 0, 1, 0, NULL); in btrfs_next_old_leaf()
4564 struct btrfs_path *path, u64 min_objectid, in btrfs_previous_item() argument
4573 if (path->slots[0] == 0) { in btrfs_previous_item()
4574 ret = btrfs_prev_leaf(root, path); in btrfs_previous_item()
4578 path->slots[0]--; in btrfs_previous_item()
4580 leaf = path->nodes[0]; in btrfs_previous_item()
4584 if (path->slots[0] == nritems) in btrfs_previous_item()
4585 path->slots[0]--; in btrfs_previous_item()
4587 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); in btrfs_previous_item()
4606 struct btrfs_path *path, u64 min_objectid) in btrfs_previous_extent_item() argument
4614 if (path->slots[0] == 0) { in btrfs_previous_extent_item()
4615 ret = btrfs_prev_leaf(root, path); in btrfs_previous_extent_item()
4619 path->slots[0]--; in btrfs_previous_extent_item()
4621 leaf = path->nodes[0]; in btrfs_previous_extent_item()
4625 if (path->slots[0] == nritems) in btrfs_previous_extent_item()
4626 path->slots[0]--; in btrfs_previous_extent_item()
4628 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); in btrfs_previous_extent_item()