Lines Matching refs:path

30 		      *root, struct btrfs_path *path, int level);
32 const struct btrfs_key *ins_key, struct btrfs_path *path,
40 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path,
989 struct btrfs_path *path, int level) in balance_level() argument
999 int orig_slot = path->slots[level]; in balance_level()
1004 mid = path->nodes[level]; in balance_level()
1006 WARN_ON(path->locks[level] != BTRFS_WRITE_LOCK); in balance_level()
1012 parent = path->nodes[level + 1]; in balance_level()
1013 pslot = path->slots[level + 1]; in balance_level()
1050 path->locks[level] = 0; in balance_level()
1051 path->nodes[level] = NULL; in balance_level()
1115 del_ptr(root, path, level + 1, pslot + 1); in balance_level()
1161 del_ptr(root, path, level + 1, pslot); in balance_level()
1182 path->nodes[level] = left; in balance_level()
1183 path->slots[level + 1] -= 1; in balance_level()
1184 path->slots[level] = orig_slot; in balance_level()
1191 path->slots[level] = orig_slot; in balance_level()
1196 btrfs_node_blockptr(path->nodes[level], path->slots[level])) in balance_level()
1204 if (path->nodes[level] != left) in balance_level()
1217 struct btrfs_path *path, int level) in push_nodes_for_insert() argument
1227 int orig_slot = path->slots[level]; in push_nodes_for_insert()
1232 mid = path->nodes[level]; in push_nodes_for_insert()
1236 parent = path->nodes[level + 1]; in push_nodes_for_insert()
1237 pslot = path->slots[level + 1]; in push_nodes_for_insert()
1278 path->nodes[level] = left; in push_nodes_for_insert()
1279 path->slots[level + 1] -= 1; in push_nodes_for_insert()
1280 path->slots[level] = orig_slot; in push_nodes_for_insert()
1286 path->slots[level] = orig_slot; in push_nodes_for_insert()
1333 path->nodes[level] = right; in push_nodes_for_insert()
1334 path->slots[level + 1] += 1; in push_nodes_for_insert()
1335 path->slots[level] = orig_slot - in push_nodes_for_insert()
1356 struct btrfs_path *path, in reada_for_search() argument
1370 if (level != 1 && path->reada != READA_FORWARD_ALWAYS) in reada_for_search()
1373 if (!path->nodes[level]) in reada_for_search()
1376 node = path->nodes[level]; in reada_for_search()
1383 if (path->reada == READA_FORWARD_ALWAYS) { in reada_for_search()
1394 if (path->reada != READA_FORWARD_ALWAYS) { in reada_for_search()
1410 if (path->reada == READA_BACK) { in reada_for_search()
1414 } else if (path->reada == READA_FORWARD || in reada_for_search()
1415 path->reada == READA_FORWARD_ALWAYS) { in reada_for_search()
1420 if (path->reada == READA_BACK && objectid) { in reada_for_search()
1426 if (path->reada == READA_FORWARD_ALWAYS || in reada_for_search()
1438 static noinline void reada_for_balance(struct btrfs_path *path, int level) in reada_for_balance() argument
1444 parent = path->nodes[level + 1]; in reada_for_balance()
1449 slot = path->slots[level + 1]; in reada_for_balance()
1471 static noinline void unlock_up(struct btrfs_path *path, int level, in unlock_up() argument
1480 if (!path->nodes[i]) in unlock_up()
1482 if (!path->locks[i]) in unlock_up()
1486 if (path->slots[i] == 0) { in unlock_up()
1491 if (path->keep_locks) { in unlock_up()
1494 nritems = btrfs_header_nritems(path->nodes[i]); in unlock_up()
1495 if (nritems < 1 || path->slots[i] >= nritems - 1) { in unlock_up()
1504 btrfs_tree_unlock_rw(path->nodes[i], path->locks[i]); in unlock_up()
1505 path->locks[i] = 0; in unlock_up()
1695 int btrfs_find_item(struct btrfs_root *fs_root, struct btrfs_path *path, in btrfs_find_item() argument
1703 ASSERT(path); in btrfs_find_item()
1710 ret = btrfs_search_slot(NULL, fs_root, &key, path, 0, 0); in btrfs_find_item()
1714 eb = path->nodes[0]; in btrfs_find_item()
1715 if (ret && path->slots[0] >= btrfs_header_nritems(eb)) { in btrfs_find_item()
1716 ret = btrfs_next_leaf(fs_root, path); in btrfs_find_item()
1719 eb = path->nodes[0]; in btrfs_find_item()
1722 btrfs_item_key_to_cpu(eb, found_key, path->slots[0]); in btrfs_find_item()
1824 static int finish_need_commit_sem_search(struct btrfs_path *path) in finish_need_commit_sem_search() argument
1826 const int i = path->lowest_level; in finish_need_commit_sem_search()
1827 const int slot = path->slots[i]; in finish_need_commit_sem_search()
1828 struct extent_buffer *lowest = path->nodes[i]; in finish_need_commit_sem_search()
1831 ASSERT(path->need_commit_sem); in finish_need_commit_sem_search()
1842 btrfs_release_path(path); in finish_need_commit_sem_search()
1843 path->nodes[i] = clone; in finish_need_commit_sem_search()
1844 path->slots[i] = slot; in finish_need_commit_sem_search()
1873 struct btrfs_path *path, in search_leaf() argument
1877 struct extent_buffer *leaf = path->nodes[0]; in search_leaf()
1901 if (path->locks[1] && leaf_free_space >= ins_len) { in search_leaf()
1928 btrfs_unlock_up_safe(path, 1); in search_leaf()
1946 btrfs_unlock_up_safe(path, 1); in search_leaf()
1953 path->slots[0] = 0; in search_leaf()
1960 prev_cmp, &path->slots[0]); in search_leaf()
1975 if (ret == 0 && !path->search_for_extension) { in search_leaf()
1985 err = split_leaf(trans, root, key, path, ins_len, in search_leaf()
2457 struct btrfs_path *path) in btrfs_search_backwards() argument
2461 ret = btrfs_search_slot(NULL, root, key, path, 0, 0); in btrfs_search_backwards()
2463 ret = btrfs_previous_item(root, path, key->objectid, key->type); in btrfs_search_backwards()
2466 btrfs_item_key_to_cpu(path->nodes[0], key, path->slots[0]); in btrfs_search_backwards()
2483 struct btrfs_path *path) in btrfs_get_next_valid_item() argument
2487 const int slot = path->slots[0]; in btrfs_get_next_valid_item()
2488 const struct extent_buffer *leaf = path->nodes[0]; in btrfs_get_next_valid_item()
2496 ret = btrfs_next_leaf(root, path); in btrfs_get_next_valid_item()
2516 static void fixup_low_keys(struct btrfs_path *path, in fixup_low_keys() argument
2524 int tslot = path->slots[i]; in fixup_low_keys()
2526 if (!path->nodes[i]) in fixup_low_keys()
2528 t = path->nodes[i]; in fixup_low_keys()
2533 btrfs_mark_buffer_dirty(path->nodes[i]); in fixup_low_keys()
2546 struct btrfs_path *path, in btrfs_set_item_key_safe() argument
2553 eb = path->nodes[0]; in btrfs_set_item_key_safe()
2554 slot = path->slots[0]; in btrfs_set_item_key_safe()
2588 fixup_low_keys(path, &disk_key, 1); in btrfs_set_item_key_safe()
2803 struct btrfs_path *path, int level) in insert_new_root() argument
2813 BUG_ON(path->nodes[level]); in insert_new_root()
2814 BUG_ON(path->nodes[level-1] != root->node); in insert_new_root()
2816 lower = path->nodes[level-1]; in insert_new_root()
2850 path->nodes[level] = c; in insert_new_root()
2851 path->locks[level] = BTRFS_WRITE_LOCK; in insert_new_root()
2852 path->slots[level] = 0; in insert_new_root()
2864 struct btrfs_path *path, in insert_ptr() argument
2872 BUG_ON(!path->nodes[level]); in insert_ptr()
2873 btrfs_assert_tree_write_locked(path->nodes[level]); in insert_ptr()
2874 lower = path->nodes[level]; in insert_ptr()
2913 struct btrfs_path *path, int level) in split_node() argument
2923 c = path->nodes[level]; in split_node()
2936 ret = insert_new_root(trans, root, path, level + 1); in split_node()
2940 ret = push_nodes_for_insert(trans, root, path, level); in split_node()
2941 c = path->nodes[level]; in split_node()
2977 insert_ptr(trans, path, &disk_key, split->start, in split_node()
2978 path->slots[level + 1] + 1, level + 1); in split_node()
2980 if (path->slots[level] >= mid) { in split_node()
2981 path->slots[level] -= mid; in split_node()
2984 path->nodes[level] = split; in split_node()
2985 path->slots[level + 1] += 1; in split_node()
3040 struct btrfs_path *path, in __push_leaf_right() argument
3047 struct extent_buffer *left = path->nodes[0]; in __push_leaf_right()
3048 struct extent_buffer *upper = path->nodes[1]; in __push_leaf_right()
3065 if (path->slots[0] >= left_nritems) in __push_leaf_right()
3068 slot = path->slots[1]; in __push_leaf_right()
3072 if (path->slots[0] > i) in __push_leaf_right()
3074 if (path->slots[0] == i) { in __push_leaf_right()
3082 if (path->slots[0] == i) in __push_leaf_right()
3147 if (path->slots[0] >= left_nritems) { in __push_leaf_right()
3148 path->slots[0] -= left_nritems; in __push_leaf_right()
3149 if (btrfs_header_nritems(path->nodes[0]) == 0) in __push_leaf_right()
3150 btrfs_clear_buffer_dirty(trans, path->nodes[0]); in __push_leaf_right()
3151 btrfs_tree_unlock(path->nodes[0]); in __push_leaf_right()
3152 free_extent_buffer(path->nodes[0]); in __push_leaf_right()
3153 path->nodes[0] = right; in __push_leaf_right()
3154 path->slots[1] += 1; in __push_leaf_right()
3178 *root, struct btrfs_path *path, in push_leaf_right() argument
3182 struct extent_buffer *left = path->nodes[0]; in push_leaf_right()
3190 if (!path->nodes[1]) in push_leaf_right()
3193 slot = path->slots[1]; in push_leaf_right()
3194 upper = path->nodes[1]; in push_leaf_right()
3198 btrfs_assert_tree_write_locked(path->nodes[1]); in push_leaf_right()
3229 if (path->slots[0] == left_nritems && !empty) { in push_leaf_right()
3236 path->nodes[0] = right; in push_leaf_right()
3237 path->slots[0] = 0; in push_leaf_right()
3238 path->slots[1]++; in push_leaf_right()
3242 return __push_leaf_right(trans, path, min_data_size, empty, right, in push_leaf_right()
3259 struct btrfs_path *path, int data_size, in __push_leaf_left() argument
3266 struct extent_buffer *right = path->nodes[0]; in __push_leaf_left()
3284 if (path->slots[0] < i) in __push_leaf_left()
3286 if (path->slots[0] == i) { in __push_leaf_left()
3294 if (path->slots[0] == i) in __push_leaf_left()
3366 fixup_low_keys(path, &disk_key, 1); in __push_leaf_left()
3369 if (path->slots[0] < push_items) { in __push_leaf_left()
3370 path->slots[0] += old_left_nritems; in __push_leaf_left()
3371 btrfs_tree_unlock(path->nodes[0]); in __push_leaf_left()
3372 free_extent_buffer(path->nodes[0]); in __push_leaf_left()
3373 path->nodes[0] = left; in __push_leaf_left()
3374 path->slots[1] -= 1; in __push_leaf_left()
3378 path->slots[0] -= push_items; in __push_leaf_left()
3380 BUG_ON(path->slots[0] < 0); in __push_leaf_left()
3397 *root, struct btrfs_path *path, int min_data_size, in push_leaf_left() argument
3400 struct extent_buffer *right = path->nodes[0]; in push_leaf_left()
3407 slot = path->slots[1]; in push_leaf_left()
3410 if (!path->nodes[1]) in push_leaf_left()
3417 btrfs_assert_tree_write_locked(path->nodes[1]); in push_leaf_left()
3419 left = btrfs_read_node_slot(path->nodes[1], slot - 1); in push_leaf_left()
3436 path->nodes[1], slot - 1, &left, in push_leaf_left()
3449 return __push_leaf_left(trans, path, min_data_size, empty, left, in push_leaf_left()
3462 struct btrfs_path *path, in copy_for_split() argument
3495 insert_ptr(trans, path, &disk_key, right->start, path->slots[1] + 1, 1); in copy_for_split()
3499 BUG_ON(path->slots[0] != slot); in copy_for_split()
3502 btrfs_tree_unlock(path->nodes[0]); in copy_for_split()
3503 free_extent_buffer(path->nodes[0]); in copy_for_split()
3504 path->nodes[0] = right; in copy_for_split()
3505 path->slots[0] -= mid; in copy_for_split()
3506 path->slots[1] += 1; in copy_for_split()
3512 BUG_ON(path->slots[0] < 0); in copy_for_split()
3527 struct btrfs_path *path, in push_for_double_split() argument
3536 slot = path->slots[0]; in push_for_double_split()
3537 if (slot < btrfs_header_nritems(path->nodes[0])) in push_for_double_split()
3538 space_needed -= btrfs_leaf_free_space(path->nodes[0]); in push_for_double_split()
3544 ret = push_leaf_right(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
3551 nritems = btrfs_header_nritems(path->nodes[0]); in push_for_double_split()
3556 if (path->slots[0] == 0 || path->slots[0] == nritems) in push_for_double_split()
3559 if (btrfs_leaf_free_space(path->nodes[0]) >= data_size) in push_for_double_split()
3563 slot = path->slots[0]; in push_for_double_split()
3566 space_needed -= btrfs_leaf_free_space(path->nodes[0]); in push_for_double_split()
3567 ret = push_leaf_left(trans, root, path, 1, space_needed, 0, slot); in push_for_double_split()
3588 struct btrfs_path *path, int data_size, in split_leaf() argument
3604 l = path->nodes[0]; in split_leaf()
3605 slot = path->slots[0]; in split_leaf()
3611 if (data_size && path->nodes[1]) { in split_leaf()
3617 wret = push_leaf_right(trans, root, path, space_needed, in split_leaf()
3625 wret = push_leaf_left(trans, root, path, space_needed, in split_leaf()
3630 l = path->nodes[0]; in split_leaf()
3637 if (!path->nodes[1]) { in split_leaf()
3638 ret = insert_new_root(trans, root, path, 1); in split_leaf()
3644 l = path->nodes[0]; in split_leaf()
3645 slot = path->slots[0]; in split_leaf()
3711 insert_ptr(trans, path, &disk_key, in split_leaf()
3712 right->start, path->slots[1] + 1, 1); in split_leaf()
3713 btrfs_tree_unlock(path->nodes[0]); in split_leaf()
3714 free_extent_buffer(path->nodes[0]); in split_leaf()
3715 path->nodes[0] = right; in split_leaf()
3716 path->slots[0] = 0; in split_leaf()
3717 path->slots[1] += 1; in split_leaf()
3720 insert_ptr(trans, path, &disk_key, in split_leaf()
3721 right->start, path->slots[1], 1); in split_leaf()
3722 btrfs_tree_unlock(path->nodes[0]); in split_leaf()
3723 free_extent_buffer(path->nodes[0]); in split_leaf()
3724 path->nodes[0] = right; in split_leaf()
3725 path->slots[0] = 0; in split_leaf()
3726 if (path->slots[1] == 0) in split_leaf()
3727 fixup_low_keys(path, &disk_key, 1); in split_leaf()
3737 copy_for_split(trans, path, l, right, slot, mid, nritems); in split_leaf()
3748 push_for_double_split(trans, root, path, data_size); in split_leaf()
3750 if (btrfs_leaf_free_space(path->nodes[0]) >= data_size) in split_leaf()
3757 struct btrfs_path *path, int ins_len) in setup_leaf_for_split() argument
3766 leaf = path->nodes[0]; in setup_leaf_for_split()
3767 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in setup_leaf_for_split()
3775 item_size = btrfs_item_size(leaf, path->slots[0]); in setup_leaf_for_split()
3777 fi = btrfs_item_ptr(leaf, path->slots[0], in setup_leaf_for_split()
3781 btrfs_release_path(path); in setup_leaf_for_split()
3783 path->keep_locks = 1; in setup_leaf_for_split()
3784 path->search_for_split = 1; in setup_leaf_for_split()
3785 ret = btrfs_search_slot(trans, root, &key, path, 0, 1); in setup_leaf_for_split()
3786 path->search_for_split = 0; in setup_leaf_for_split()
3793 leaf = path->nodes[0]; in setup_leaf_for_split()
3795 if (item_size != btrfs_item_size(leaf, path->slots[0])) in setup_leaf_for_split()
3799 if (btrfs_leaf_free_space(path->nodes[0]) >= ins_len) in setup_leaf_for_split()
3803 fi = btrfs_item_ptr(leaf, path->slots[0], in setup_leaf_for_split()
3809 ret = split_leaf(trans, root, &key, path, ins_len, 1); in setup_leaf_for_split()
3813 path->keep_locks = 0; in setup_leaf_for_split()
3814 btrfs_unlock_up_safe(path, 1); in setup_leaf_for_split()
3817 path->keep_locks = 0; in setup_leaf_for_split()
3821 static noinline int split_item(struct btrfs_path *path, in split_item() argument
3833 leaf = path->nodes[0]; in split_item()
3836 orig_slot = path->slots[0]; in split_item()
3837 orig_offset = btrfs_item_offset(leaf, path->slots[0]); in split_item()
3838 item_size = btrfs_item_size(leaf, path->slots[0]); in split_item()
3845 path->slots[0]), item_size); in split_item()
3847 slot = path->slots[0] + 1; in split_item()
3868 btrfs_item_ptr_offset(leaf, path->slots[0]), in split_item()
3899 struct btrfs_path *path, in btrfs_split_item() argument
3904 ret = setup_leaf_for_split(trans, root, path, in btrfs_split_item()
3909 ret = split_item(path, new_key, split_offset); in btrfs_split_item()
3919 void btrfs_truncate_item(struct btrfs_path *path, u32 new_size, int from_end) in btrfs_truncate_item() argument
3931 leaf = path->nodes[0]; in btrfs_truncate_item()
3932 slot = path->slots[0]; in btrfs_truncate_item()
3995 fixup_low_keys(path, &disk_key, 1); in btrfs_truncate_item()
4010 void btrfs_extend_item(struct btrfs_path *path, u32 data_size) in btrfs_extend_item() argument
4021 leaf = path->nodes[0]; in btrfs_extend_item()
4030 slot = path->slots[0]; in btrfs_extend_item()
4078 static void setup_items_for_insert(struct btrfs_root *root, struct btrfs_path *path, in setup_items_for_insert() argument
4096 if (path->slots[0] == 0) { in setup_items_for_insert()
4098 fixup_low_keys(path, &disk_key, 1); in setup_items_for_insert()
4100 btrfs_unlock_up_safe(path, 1); in setup_items_for_insert()
4102 leaf = path->nodes[0]; in setup_items_for_insert()
4103 slot = path->slots[0]; in setup_items_for_insert()
4174 struct btrfs_path *path, in btrfs_setup_item_for_insert() argument
4185 setup_items_for_insert(root, path, &batch); in btrfs_setup_item_for_insert()
4194 struct btrfs_path *path, in btrfs_insert_empty_items() argument
4202 ret = btrfs_search_slot(trans, root, &batch->keys[0], path, total_size, 1); in btrfs_insert_empty_items()
4208 slot = path->slots[0]; in btrfs_insert_empty_items()
4211 setup_items_for_insert(root, path, batch); in btrfs_insert_empty_items()
4224 struct btrfs_path *path; in btrfs_insert_item() local
4228 path = btrfs_alloc_path(); in btrfs_insert_item()
4229 if (!path) in btrfs_insert_item()
4231 ret = btrfs_insert_empty_item(trans, root, path, cpu_key, data_size); in btrfs_insert_item()
4233 leaf = path->nodes[0]; in btrfs_insert_item()
4234 ptr = btrfs_item_ptr_offset(leaf, path->slots[0]); in btrfs_insert_item()
4238 btrfs_free_path(path); in btrfs_insert_item()
4252 struct btrfs_path *path, in btrfs_duplicate_item() argument
4259 leaf = path->nodes[0]; in btrfs_duplicate_item()
4260 item_size = btrfs_item_size(leaf, path->slots[0]); in btrfs_duplicate_item()
4261 ret = setup_leaf_for_split(trans, root, path, in btrfs_duplicate_item()
4266 path->slots[0]++; in btrfs_duplicate_item()
4267 btrfs_setup_item_for_insert(root, path, new_key, item_size); in btrfs_duplicate_item()
4268 leaf = path->nodes[0]; in btrfs_duplicate_item()
4270 btrfs_item_ptr_offset(leaf, path->slots[0]), in btrfs_duplicate_item()
4271 btrfs_item_ptr_offset(leaf, path->slots[0] - 1), in btrfs_duplicate_item()
4282 static void del_ptr(struct btrfs_root *root, struct btrfs_path *path, in del_ptr() argument
4285 struct extent_buffer *parent = path->nodes[level]; in del_ptr()
4317 fixup_low_keys(path, &disk_key, level + 1); in del_ptr()
4334 struct btrfs_path *path, in btrfs_del_leaf() argument
4338 del_ptr(root, path, 1, path->slots[1]); in btrfs_del_leaf()
4344 btrfs_unlock_up_safe(path, 0); in btrfs_del_leaf()
4357 struct btrfs_path *path, int slot, int nr) in btrfs_del_items() argument
4365 leaf = path->nodes[0]; in btrfs_del_items()
4400 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
4408 fixup_low_keys(path, &disk_key, 1); in btrfs_del_items()
4426 slot = path->slots[1]; in btrfs_del_items()
4434 wret = push_leaf_left(trans, root, path, 0, in btrfs_del_items()
4439 if (path->nodes[0] == leaf && in btrfs_del_items()
4453 wret = push_leaf_right(trans, root, path, 0, in btrfs_del_items()
4460 path->slots[1] = slot; in btrfs_del_items()
4461 btrfs_del_leaf(trans, root, path, leaf); in btrfs_del_items()
4470 if (path->nodes[0] == leaf) in btrfs_del_items()
4489 int btrfs_prev_leaf(struct btrfs_root *root, struct btrfs_path *path) in btrfs_prev_leaf() argument
4495 btrfs_item_key_to_cpu(path->nodes[0], &key, 0); in btrfs_prev_leaf()
4510 btrfs_release_path(path); in btrfs_prev_leaf()
4511 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_prev_leaf()
4514 btrfs_item_key(path->nodes[0], &found_key, 0); in btrfs_prev_leaf()
4551 struct btrfs_path *path, in btrfs_search_forward() argument
4561 int keep_locks = path->keep_locks; in btrfs_search_forward()
4563 ASSERT(!path->nowait); in btrfs_search_forward()
4564 path->keep_locks = 1; in btrfs_search_forward()
4568 WARN_ON(path->nodes[level]); in btrfs_search_forward()
4569 path->nodes[level] = cur; in btrfs_search_forward()
4570 path->locks[level] = BTRFS_READ_LOCK; in btrfs_search_forward()
4586 if (level == path->lowest_level) { in btrfs_search_forward()
4590 path->slots[level] = slot; in btrfs_search_forward()
4616 path->slots[level] = slot; in btrfs_search_forward()
4617 sret = btrfs_find_next_key(root, path, min_key, level, in btrfs_search_forward()
4620 btrfs_release_path(path); in btrfs_search_forward()
4628 path->slots[level] = slot; in btrfs_search_forward()
4629 if (level == path->lowest_level) { in btrfs_search_forward()
4641 path->locks[level - 1] = BTRFS_READ_LOCK; in btrfs_search_forward()
4642 path->nodes[level - 1] = cur; in btrfs_search_forward()
4643 unlock_up(path, level, 1, 0, NULL); in btrfs_search_forward()
4646 path->keep_locks = keep_locks; in btrfs_search_forward()
4648 btrfs_unlock_up_safe(path, path->lowest_level + 1); in btrfs_search_forward()
4665 int btrfs_find_next_key(struct btrfs_root *root, struct btrfs_path *path, in btrfs_find_next_key() argument
4671 WARN_ON(!path->keep_locks && !path->skip_locking); in btrfs_find_next_key()
4673 if (!path->nodes[level]) in btrfs_find_next_key()
4676 slot = path->slots[level] + 1; in btrfs_find_next_key()
4677 c = path->nodes[level]; in btrfs_find_next_key()
4684 !path->nodes[level + 1]) in btrfs_find_next_key()
4687 if (path->locks[level + 1] || path->skip_locking) { in btrfs_find_next_key()
4698 orig_lowest = path->lowest_level; in btrfs_find_next_key()
4699 btrfs_release_path(path); in btrfs_find_next_key()
4700 path->lowest_level = level; in btrfs_find_next_key()
4701 ret = btrfs_search_slot(NULL, root, &cur_key, path, in btrfs_find_next_key()
4703 path->lowest_level = orig_lowest; in btrfs_find_next_key()
4707 c = path->nodes[level]; in btrfs_find_next_key()
4708 slot = path->slots[level]; in btrfs_find_next_key()
4730 int btrfs_next_old_leaf(struct btrfs_root *root, struct btrfs_path *path, in btrfs_next_old_leaf() argument
4749 ASSERT(!path->nowait); in btrfs_next_old_leaf()
4751 nritems = btrfs_header_nritems(path->nodes[0]); in btrfs_next_old_leaf()
4755 btrfs_item_key_to_cpu(path->nodes[0], &key, nritems - 1); in btrfs_next_old_leaf()
4759 btrfs_release_path(path); in btrfs_next_old_leaf()
4761 path->keep_locks = 1; in btrfs_next_old_leaf()
4764 ret = btrfs_search_old_slot(root, &key, path, time_seq); in btrfs_next_old_leaf()
4766 if (path->need_commit_sem) { in btrfs_next_old_leaf()
4767 path->need_commit_sem = 0; in btrfs_next_old_leaf()
4769 if (path->nowait) { in btrfs_next_old_leaf()
4778 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_next_old_leaf()
4780 path->keep_locks = 0; in btrfs_next_old_leaf()
4785 nritems = btrfs_header_nritems(path->nodes[0]); in btrfs_next_old_leaf()
4792 if (nritems > 0 && path->slots[0] < nritems - 1) { in btrfs_next_old_leaf()
4794 path->slots[0]++; in btrfs_next_old_leaf()
4812 if (nritems > 0 && ret > 0 && path->slots[0] == nritems - 1) { in btrfs_next_old_leaf()
4818 if (!path->nodes[level]) { in btrfs_next_old_leaf()
4823 slot = path->slots[level] + 1; in btrfs_next_old_leaf()
4824 c = path->nodes[level]; in btrfs_next_old_leaf()
4841 if (path->locks[level]) { in btrfs_next_old_leaf()
4842 btrfs_tree_read_unlock(path->nodes[i]); in btrfs_next_old_leaf()
4843 path->locks[i] = 0; in btrfs_next_old_leaf()
4845 free_extent_buffer(path->nodes[i]); in btrfs_next_old_leaf()
4846 path->nodes[i] = NULL; in btrfs_next_old_leaf()
4850 ret = read_block_for_search(root, path, &next, level, in btrfs_next_old_leaf()
4852 if (ret == -EAGAIN && !path->nowait) in btrfs_next_old_leaf()
4856 btrfs_release_path(path); in btrfs_next_old_leaf()
4860 if (!path->skip_locking) { in btrfs_next_old_leaf()
4862 if (!ret && path->nowait) { in btrfs_next_old_leaf()
4875 btrfs_release_path(path); in btrfs_next_old_leaf()
4884 path->slots[level] = slot; in btrfs_next_old_leaf()
4887 path->nodes[level] = next; in btrfs_next_old_leaf()
4888 path->slots[level] = 0; in btrfs_next_old_leaf()
4889 if (!path->skip_locking) in btrfs_next_old_leaf()
4890 path->locks[level] = BTRFS_READ_LOCK; in btrfs_next_old_leaf()
4894 ret = read_block_for_search(root, path, &next, level, in btrfs_next_old_leaf()
4896 if (ret == -EAGAIN && !path->nowait) in btrfs_next_old_leaf()
4900 btrfs_release_path(path); in btrfs_next_old_leaf()
4904 if (!path->skip_locking) { in btrfs_next_old_leaf()
4905 if (path->nowait) { in btrfs_next_old_leaf()
4917 unlock_up(path, 0, 1, 0, NULL); in btrfs_next_old_leaf()
4921 path->need_commit_sem = 1; in btrfs_next_old_leaf()
4922 ret2 = finish_need_commit_sem_search(path); in btrfs_next_old_leaf()
4931 int btrfs_next_old_item(struct btrfs_root *root, struct btrfs_path *path, u64 time_seq) in btrfs_next_old_item() argument
4933 path->slots[0]++; in btrfs_next_old_item()
4934 if (path->slots[0] >= btrfs_header_nritems(path->nodes[0])) in btrfs_next_old_item()
4935 return btrfs_next_old_leaf(root, path, time_seq); in btrfs_next_old_item()
4946 struct btrfs_path *path, u64 min_objectid, in btrfs_previous_item() argument
4955 if (path->slots[0] == 0) { in btrfs_previous_item()
4956 ret = btrfs_prev_leaf(root, path); in btrfs_previous_item()
4960 path->slots[0]--; in btrfs_previous_item()
4962 leaf = path->nodes[0]; in btrfs_previous_item()
4966 if (path->slots[0] == nritems) in btrfs_previous_item()
4967 path->slots[0]--; in btrfs_previous_item()
4969 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); in btrfs_previous_item()
4988 struct btrfs_path *path, u64 min_objectid) in btrfs_previous_extent_item() argument
4996 if (path->slots[0] == 0) { in btrfs_previous_extent_item()
4997 ret = btrfs_prev_leaf(root, path); in btrfs_previous_extent_item()
5001 path->slots[0]--; in btrfs_previous_extent_item()
5003 leaf = path->nodes[0]; in btrfs_previous_extent_item()
5007 if (path->slots[0] == nritems) in btrfs_previous_extent_item()
5008 path->slots[0]--; in btrfs_previous_extent_item()
5010 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); in btrfs_previous_extent_item()