Lines Matching refs:path
61 static int find_next_key(const struct btrfs_path *path, int level,
74 BTRFS_PATH_AUTO_FREE(path); in btrfs_lookup_data_extent()
76 path = btrfs_alloc_path(); in btrfs_lookup_data_extent()
77 if (!path) in btrfs_lookup_data_extent()
83 return btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_lookup_data_extent()
103 BTRFS_PATH_AUTO_FREE(path); in btrfs_lookup_extent_info()
119 path = btrfs_alloc_path(); in btrfs_lookup_extent_info()
120 if (!path) in btrfs_lookup_extent_info()
132 ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0); in btrfs_lookup_extent_info()
137 if (path->slots[0]) { in btrfs_lookup_extent_info()
138 path->slots[0]--; in btrfs_lookup_extent_info()
139 btrfs_item_key_to_cpu(path->nodes[0], &key, in btrfs_lookup_extent_info()
140 path->slots[0]); in btrfs_lookup_extent_info()
149 struct extent_buffer *leaf = path->nodes[0]; in btrfs_lookup_extent_info()
151 const u32 item_size = btrfs_item_size(leaf, path->slots[0]); in btrfs_lookup_extent_info()
162 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in btrfs_lookup_extent_info()
173 owner = btrfs_get_extent_owner_root(fs_info, leaf, path->slots[0]); in btrfs_lookup_extent_info()
188 btrfs_release_path(path); in btrfs_lookup_extent_info()
424 struct btrfs_path *path, in lookup_extent_data_ref() argument
448 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_extent_data_ref()
459 leaf = path->nodes[0]; in lookup_extent_data_ref()
462 if (path->slots[0] >= nritems) { in lookup_extent_data_ref()
463 ret = btrfs_next_leaf(root, path); in lookup_extent_data_ref()
470 leaf = path->nodes[0]; in lookup_extent_data_ref()
475 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in lookup_extent_data_ref()
480 ref = btrfs_item_ptr(leaf, path->slots[0], in lookup_extent_data_ref()
486 btrfs_release_path(path); in lookup_extent_data_ref()
492 path->slots[0]++; in lookup_extent_data_ref()
499 struct btrfs_path *path, in insert_extent_data_ref() argument
523 ret = btrfs_insert_empty_item(trans, root, path, &key, size); in insert_extent_data_ref()
527 leaf = path->nodes[0]; in insert_extent_data_ref()
530 ref = btrfs_item_ptr(leaf, path->slots[0], in insert_extent_data_ref()
542 ref = btrfs_item_ptr(leaf, path->slots[0], in insert_extent_data_ref()
547 btrfs_release_path(path); in insert_extent_data_ref()
549 ret = btrfs_insert_empty_item(trans, root, path, &key, in insert_extent_data_ref()
554 leaf = path->nodes[0]; in insert_extent_data_ref()
556 ref = btrfs_item_ptr(leaf, path->slots[0], in insert_extent_data_ref()
571 btrfs_release_path(path); in insert_extent_data_ref()
577 struct btrfs_path *path, in remove_extent_data_ref() argument
587 leaf = path->nodes[0]; in remove_extent_data_ref()
588 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in remove_extent_data_ref()
591 ref1 = btrfs_item_ptr(leaf, path->slots[0], in remove_extent_data_ref()
595 ref2 = btrfs_item_ptr(leaf, path->slots[0], in remove_extent_data_ref()
610 ret = btrfs_del_item(trans, root, path); in remove_extent_data_ref()
620 static noinline u32 extent_data_ref_count(const struct btrfs_path *path, in extent_data_ref_count() argument
630 leaf = path->nodes[0]; in extent_data_ref_count()
631 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in extent_data_ref_count()
648 ref1 = btrfs_item_ptr(leaf, path->slots[0], in extent_data_ref_count()
652 ref2 = btrfs_item_ptr(leaf, path->slots[0], in extent_data_ref_count()
662 struct btrfs_path *path, in lookup_tree_block_ref() argument
679 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_tree_block_ref()
686 struct btrfs_path *path, in insert_tree_block_ref() argument
703 ret = btrfs_insert_empty_item(trans, root, path, &key, 0); in insert_tree_block_ref()
704 btrfs_release_path(path); in insert_tree_block_ref()
725 static int find_next_key(const struct btrfs_path *path, int level, in find_next_key() argument
730 if (!path->nodes[level]) in find_next_key()
732 if (path->slots[level] + 1 >= in find_next_key()
733 btrfs_header_nritems(path->nodes[level])) in find_next_key()
736 btrfs_item_key_to_cpu(path->nodes[level], key, in find_next_key()
737 path->slots[level] + 1); in find_next_key()
739 btrfs_node_key_to_cpu(path->nodes[level], key, in find_next_key()
740 path->slots[level] + 1); in find_next_key()
761 struct btrfs_path *path, in lookup_inline_extent_backref() argument
791 path->search_for_extension = 1; in lookup_inline_extent_backref()
805 ret = btrfs_search_slot(trans, root, &key, path, extra_size, 1); in lookup_inline_extent_backref()
815 if (path->slots[0]) { in lookup_inline_extent_backref()
816 path->slots[0]--; in lookup_inline_extent_backref()
817 btrfs_item_key_to_cpu(path->nodes[0], &key, in lookup_inline_extent_backref()
818 path->slots[0]); in lookup_inline_extent_backref()
828 btrfs_release_path(path); in lookup_inline_extent_backref()
837 btrfs_print_leaf(path->nodes[0]); in lookup_inline_extent_backref()
846 leaf = path->nodes[0]; in lookup_inline_extent_backref()
847 item_size = btrfs_item_size(leaf, path->slots[0]); in lookup_inline_extent_backref()
857 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in lookup_inline_extent_backref()
929 btrfs_print_leaf(path->nodes[0]); in lookup_inline_extent_backref()
932 path->slots[0], root_objectid, owner, offset, parent); in lookup_inline_extent_backref()
943 if (path->slots[0] + 1 < btrfs_header_nritems(path->nodes[0])) { in lookup_inline_extent_backref()
946 btrfs_item_key_to_cpu(path->nodes[0], &tmp_key, path->slots[0] + 1); in lookup_inline_extent_backref()
955 if (!path->keep_locks) { in lookup_inline_extent_backref()
956 btrfs_release_path(path); in lookup_inline_extent_backref()
957 path->keep_locks = 1; in lookup_inline_extent_backref()
967 if (find_next_key(path, 0, &key) == 0 && in lookup_inline_extent_backref()
977 if (path->keep_locks) { in lookup_inline_extent_backref()
978 path->keep_locks = 0; in lookup_inline_extent_backref()
979 btrfs_unlock_up_safe(path, 1); in lookup_inline_extent_backref()
982 path->search_for_extension = 0; in lookup_inline_extent_backref()
991 struct btrfs_path *path, in setup_inline_extent_backref() argument
1006 leaf = path->nodes[0]; in setup_inline_extent_backref()
1007 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in setup_inline_extent_backref()
1013 btrfs_extend_item(trans, path, size); in setup_inline_extent_backref()
1015 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in setup_inline_extent_backref()
1023 end = (unsigned long)ei + btrfs_item_size(leaf, path->slots[0]); in setup_inline_extent_backref()
1050 struct btrfs_path *path, in lookup_extent_backref() argument
1057 ret = lookup_inline_extent_backref(trans, path, ref_ret, bytenr, in lookup_extent_backref()
1063 btrfs_release_path(path); in lookup_extent_backref()
1067 ret = lookup_tree_block_ref(trans, path, bytenr, parent, in lookup_extent_backref()
1070 ret = lookup_extent_data_ref(trans, path, bytenr, parent, in lookup_extent_backref()
1081 struct btrfs_path *path, in update_inline_extent_backref() argument
1086 struct extent_buffer *leaf = path->nodes[0]; in update_inline_extent_backref()
1098 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in update_inline_extent_backref()
1104 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in update_inline_extent_backref()
1147 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in update_inline_extent_backref()
1161 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in update_inline_extent_backref()
1182 item_size = btrfs_item_size(leaf, path->slots[0]); in update_inline_extent_backref()
1189 btrfs_truncate_item(trans, path, item_size, 1); in update_inline_extent_backref()
1196 struct btrfs_path *path, in insert_inline_extent_backref() argument
1205 ret = lookup_inline_extent_backref(trans, path, &iref, bytenr, in insert_inline_extent_backref()
1214 btrfs_print_leaf(path->nodes[0]); in insert_inline_extent_backref()
1217 bytenr, num_bytes, root_objectid, path->slots[0]); in insert_inline_extent_backref()
1220 ret = update_inline_extent_backref(trans, path, iref, in insert_inline_extent_backref()
1223 setup_inline_extent_backref(trans, path, iref, parent, in insert_inline_extent_backref()
1233 struct btrfs_path *path, in remove_extent_backref() argument
1241 ret = update_inline_extent_backref(trans, path, iref, in remove_extent_backref()
1244 ret = remove_extent_data_ref(trans, root, path, refs_to_drop); in remove_extent_backref()
1246 ret = btrfs_del_item(trans, root, path); in remove_extent_backref()
1486 BTRFS_PATH_AUTO_FREE(path); in __btrfs_inc_extent_ref()
1498 path = btrfs_alloc_path(); in __btrfs_inc_extent_ref()
1499 if (!path) in __btrfs_inc_extent_ref()
1503 ret = insert_inline_extent_backref(trans, path, bytenr, num_bytes, in __btrfs_inc_extent_ref()
1514 leaf = path->nodes[0]; in __btrfs_inc_extent_ref()
1515 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in __btrfs_inc_extent_ref()
1516 item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in __btrfs_inc_extent_ref()
1522 btrfs_release_path(path); in __btrfs_inc_extent_ref()
1526 ret = insert_tree_block_ref(trans, path, node, bytenr); in __btrfs_inc_extent_ref()
1530 ret = insert_extent_data_ref(trans, path, node, bytenr); in __btrfs_inc_extent_ref()
1631 BTRFS_PATH_AUTO_FREE(path); in run_delayed_extent_op()
1644 path = btrfs_alloc_path(); in run_delayed_extent_op()
1645 if (!path) in run_delayed_extent_op()
1660 ret = btrfs_search_slot(trans, root, &key, path, 0, 1); in run_delayed_extent_op()
1665 if (path->slots[0] > 0) { in run_delayed_extent_op()
1666 path->slots[0]--; in run_delayed_extent_op()
1667 btrfs_item_key_to_cpu(path->nodes[0], &key, in run_delayed_extent_op()
1668 path->slots[0]); in run_delayed_extent_op()
1675 btrfs_release_path(path); in run_delayed_extent_op()
1692 leaf = path->nodes[0]; in run_delayed_extent_op()
1693 item_size = btrfs_item_size(leaf, path->slots[0]); in run_delayed_extent_op()
1704 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in run_delayed_extent_op()
2204 struct btrfs_path *path, in check_delayed_ref() argument
2233 if (path->nowait) { in check_delayed_ref()
2242 btrfs_release_path(path); in check_delayed_ref()
2335 struct btrfs_path *path, in check_committed_ref() argument
2355 ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0); in check_committed_ref()
2366 if (path->slots[0] == 0) in check_committed_ref()
2369 path->slots[0]--; in check_committed_ref()
2370 leaf = path->nodes[0]; in check_committed_ref()
2371 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in check_committed_ref()
2376 item_size = btrfs_item_size(leaf, path->slots[0]); in check_committed_ref()
2377 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in check_committed_ref()
2413 u64 bytenr, struct btrfs_path *path) in btrfs_cross_ref_exist() argument
2418 ret = check_committed_ref(inode, path, offset, bytenr); in btrfs_cross_ref_exist()
2433 struct extent_buffer *leaf = path->nodes[0]; in btrfs_cross_ref_exist()
2441 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in btrfs_cross_ref_exist()
2447 ret = check_delayed_ref(inode, path, offset, bytenr); in btrfs_cross_ref_exist()
2448 } while (ret == -EAGAIN && !path->nowait); in btrfs_cross_ref_exist()
2451 btrfs_release_path(path); in btrfs_cross_ref_exist()
3016 #define abort_and_dump(trans, path, fmt, args...) \ argument
3019 btrfs_print_leaf(path->nodes[0]); \
3089 struct btrfs_path *path; in __btrfs_free_extent() local
3112 path = btrfs_alloc_path(); in __btrfs_free_extent()
3113 if (!path) in __btrfs_free_extent()
3130 ret = lookup_extent_backref(trans, path, &iref, bytenr, num_bytes, in __btrfs_free_extent()
3141 extent_slot = path->slots[0]; in __btrfs_free_extent()
3143 btrfs_item_key_to_cpu(path->nodes[0], &key, in __btrfs_free_extent()
3159 if (path->slots[0] - extent_slot > 5) in __btrfs_free_extent()
3166 abort_and_dump(trans, path, in __btrfs_free_extent()
3168 path->slots[0]); in __btrfs_free_extent()
3173 ret = remove_extent_backref(trans, extent_root, path, in __btrfs_free_extent()
3179 btrfs_release_path(path); in __btrfs_free_extent()
3192 &key, path, -1, 1); in __btrfs_free_extent()
3193 if (ret > 0 && skinny_metadata && path->slots[0]) { in __btrfs_free_extent()
3198 path->slots[0]--; in __btrfs_free_extent()
3199 btrfs_item_key_to_cpu(path->nodes[0], &key, in __btrfs_free_extent()
3200 path->slots[0]); in __btrfs_free_extent()
3212 btrfs_release_path(path); in __btrfs_free_extent()
3214 &key, path, -1, 1); in __btrfs_free_extent()
3219 btrfs_print_leaf(path->nodes[0]); in __btrfs_free_extent()
3222 ret, bytenr, path->slots[0]); in __btrfs_free_extent()
3228 extent_slot = path->slots[0]; in __btrfs_free_extent()
3231 abort_and_dump(trans, path, in __btrfs_free_extent()
3234 owner_offset, path->slots[0]); in __btrfs_free_extent()
3241 leaf = path->nodes[0]; in __btrfs_free_extent()
3258 abort_and_dump(trans, path, in __btrfs_free_extent()
3261 path->slots[0], owner_objectid, item_size, in __btrfs_free_extent()
3272 abort_and_dump(trans, path, in __btrfs_free_extent()
3274 refs_to_drop, refs, bytenr, path->slots[0]); in __btrfs_free_extent()
3289 abort_and_dump(trans, path, in __btrfs_free_extent()
3291 path->slots[0]); in __btrfs_free_extent()
3299 ret = remove_extent_backref(trans, extent_root, path, in __btrfs_free_extent()
3318 extent_data_ref_count(path, iref)) { in __btrfs_free_extent()
3319 abort_and_dump(trans, path, in __btrfs_free_extent()
3321 extent_data_ref_count(path, iref), in __btrfs_free_extent()
3322 refs_to_drop, path->slots[0]); in __btrfs_free_extent()
3327 if (path->slots[0] != extent_slot) { in __btrfs_free_extent()
3328 abort_and_dump(trans, path, in __btrfs_free_extent()
3331 key.offset, path->slots[0]); in __btrfs_free_extent()
3342 if (path->slots[0] != extent_slot + 1) { in __btrfs_free_extent()
3343 abort_and_dump(trans, path, in __btrfs_free_extent()
3345 path->slots[0]); in __btrfs_free_extent()
3349 path->slots[0] = extent_slot; in __btrfs_free_extent()
3364 ret = btrfs_del_items(trans, extent_root, path, path->slots[0], in __btrfs_free_extent()
3370 btrfs_release_path(path); in __btrfs_free_extent()
3374 btrfs_release_path(path); in __btrfs_free_extent()
3377 btrfs_free_path(path); in __btrfs_free_extent()
4815 struct btrfs_path *path; in alloc_reserved_file_extent() local
4831 path = btrfs_alloc_path(); in alloc_reserved_file_extent()
4832 if (!path) in alloc_reserved_file_extent()
4836 ret = btrfs_insert_empty_item(trans, extent_root, path, ins, size); in alloc_reserved_file_extent()
4838 btrfs_free_path(path); in alloc_reserved_file_extent()
4842 leaf = path->nodes[0]; in alloc_reserved_file_extent()
4843 extent_item = btrfs_item_ptr(leaf, path->slots[0], in alloc_reserved_file_extent()
4873 btrfs_free_path(path); in alloc_reserved_file_extent()
4889 struct btrfs_path *path; in alloc_reserved_tree_block() local
4908 path = btrfs_alloc_path(); in alloc_reserved_tree_block()
4909 if (!path) in alloc_reserved_tree_block()
4913 ret = btrfs_insert_empty_item(trans, extent_root, path, &extent_key, in alloc_reserved_tree_block()
4916 btrfs_free_path(path); in alloc_reserved_tree_block()
4920 leaf = path->nodes[0]; in alloc_reserved_tree_block()
4921 extent_item = btrfs_item_ptr(leaf, path->slots[0], in alloc_reserved_tree_block()
4947 btrfs_free_path(path); in alloc_reserved_tree_block()
5347 struct btrfs_path *path) in reada_walk_down() argument
5360 if (path->slots[wc->level] < wc->reada_slot) { in reada_walk_down()
5369 eb = path->nodes[wc->level]; in reada_walk_down()
5372 for (slot = path->slots[wc->level]; slot < nritems; slot++) { in reada_walk_down()
5380 if (slot == path->slots[wc->level]) in reada_walk_down()
5424 struct btrfs_path *path, in walk_down_proc() argument
5429 struct extent_buffer *eb = path->nodes[level]; in walk_down_proc()
5443 ASSERT(path->locks[level]); in walk_down_proc()
5462 if (path->locks[level] && !wc->keep_locks) { in walk_down_proc()
5463 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
5464 path->locks[level] = 0; in walk_down_proc()
5471 ASSERT(path->locks[level]); in walk_down_proc()
5494 if (path->locks[level] && level > 0) { in walk_down_proc()
5495 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
5496 path->locks[level] = 0; in walk_down_proc()
5511 BTRFS_PATH_AUTO_FREE(path); in check_ref_exists()
5516 path = btrfs_alloc_path(); in check_ref_exists()
5517 if (!path) in check_ref_exists()
5520 ret = lookup_extent_backref(trans, path, &iref, bytenr, in check_ref_exists()
5550 btrfs_release_path(path); in check_ref_exists()
5572 struct btrfs_path *path, in check_next_block_uptodate() argument
5583 generation = btrfs_node_ptr_generation(path->nodes[level], path->slots[level]); in check_next_block_uptodate()
5592 btrfs_node_key_to_cpu(path->nodes[level], &check.first_key, path->slots[level]); in check_next_block_uptodate()
5596 reada_walk_down(trans, root, wc, path); in check_next_block_uptodate()
5618 struct btrfs_path *path, struct walk_control *wc, in maybe_drop_reference() argument
5636 ref.parent = path->nodes[level]->start; in maybe_drop_reference()
5638 ASSERT(btrfs_root_id(root) == btrfs_header_owner(path->nodes[level])); in maybe_drop_reference()
5639 if (btrfs_root_id(root) != btrfs_header_owner(path->nodes[level])) { in maybe_drop_reference()
5667 u64 generation = btrfs_node_ptr_generation(path->nodes[level], in maybe_drop_reference()
5668 path->slots[level]); in maybe_drop_reference()
5685 find_next_key(path, level, &wc->drop_progress); in maybe_drop_reference()
5706 struct btrfs_path *path, in do_walk_down() argument
5717 generation = btrfs_node_ptr_generation(path->nodes[level], in do_walk_down()
5718 path->slots[level]); in do_walk_down()
5730 bytenr = btrfs_node_blockptr(path->nodes[level], path->slots[level]); in do_walk_down()
5755 if (!visit_node_for_delete(root, wc, path->nodes[level], in do_walk_down()
5756 wc->flags[level - 1], path->slots[level])) in do_walk_down()
5769 ret = check_next_block_uptodate(trans, root, path, wc, next); in do_walk_down()
5780 path->nodes[level] = next; in do_walk_down()
5781 path->slots[level] = 0; in do_walk_down()
5782 path->locks[level] = BTRFS_WRITE_LOCK; in do_walk_down()
5788 ret = maybe_drop_reference(trans, root, path, wc, next, owner_root); in do_walk_down()
5817 struct btrfs_path *path, in walk_up_proc() argument
5823 struct extent_buffer *eb = path->nodes[level]; in walk_up_proc()
5831 ret = find_next_key(path, level + 1, &wc->update_progress); in walk_up_proc()
5837 path->slots[level] = 0; in walk_up_proc()
5844 if (!path->locks[level]) { in walk_up_proc()
5847 path->locks[level] = BTRFS_WRITE_LOCK; in walk_up_proc()
5855 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
5856 path->locks[level] = 0; in walk_up_proc()
5860 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
5866 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
5867 path->locks[level] = 0; in walk_up_proc()
5874 ASSERT(path->locks[level] || wc->refs[level] == 1); in walk_up_proc()
5901 if (!path->locks[level]) { in walk_up_proc()
5903 path->locks[level] = BTRFS_WRITE_LOCK; in walk_up_proc()
5915 parent = path->nodes[level + 1]->start; in walk_up_proc()
5917 btrfs_header_owner(path->nodes[level + 1])) in walk_up_proc()
5959 struct btrfs_path *path, in walk_down_tree() argument
5967 ret = walk_down_proc(trans, root, path, wc); in walk_down_tree()
5974 if (path->slots[level] >= in walk_down_tree()
5975 btrfs_header_nritems(path->nodes[level])) in walk_down_tree()
5978 ret = do_walk_down(trans, root, path, wc); in walk_down_tree()
5980 path->slots[level]++; in walk_down_tree()
6008 struct btrfs_path *path, in walk_up_tree() argument
6014 path->slots[level] = btrfs_header_nritems(path->nodes[level]); in walk_up_tree()
6015 while (level < max_level && path->nodes[level]) { in walk_up_tree()
6017 if (path->slots[level] + 1 < in walk_up_tree()
6018 btrfs_header_nritems(path->nodes[level])) { in walk_up_tree()
6019 path->slots[level]++; in walk_up_tree()
6022 ret = walk_up_proc(trans, root, path, wc); in walk_up_tree()
6028 if (path->locks[level]) { in walk_up_tree()
6029 btrfs_tree_unlock_rw(path->nodes[level], in walk_up_tree()
6030 path->locks[level]); in walk_up_tree()
6031 path->locks[level] = 0; in walk_up_tree()
6033 free_extent_buffer(path->nodes[level]); in walk_up_tree()
6034 path->nodes[level] = NULL; in walk_up_tree()
6058 struct btrfs_path *path; in btrfs_drop_snapshot() local
6072 path = btrfs_alloc_path(); in btrfs_drop_snapshot()
6073 if (!path) { in btrfs_drop_snapshot()
6080 btrfs_free_path(path); in btrfs_drop_snapshot()
6115 path->nodes[level] = btrfs_lock_root_node(root); in btrfs_drop_snapshot()
6116 path->slots[level] = 0; in btrfs_drop_snapshot()
6117 path->locks[level] = BTRFS_WRITE_LOCK; in btrfs_drop_snapshot()
6127 path->lowest_level = level; in btrfs_drop_snapshot()
6128 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_drop_snapshot()
6129 path->lowest_level = 0; in btrfs_drop_snapshot()
6140 btrfs_unlock_up_safe(path, 0); in btrfs_drop_snapshot()
6144 btrfs_tree_lock(path->nodes[level]); in btrfs_drop_snapshot()
6145 path->locks[level] = BTRFS_WRITE_LOCK; in btrfs_drop_snapshot()
6152 path->nodes[level]->start, in btrfs_drop_snapshot()
6163 btrfs_tree_unlock(path->nodes[level]); in btrfs_drop_snapshot()
6164 path->locks[level] = 0; in btrfs_drop_snapshot()
6180 ret = walk_down_tree(trans, root, path, wc); in btrfs_drop_snapshot()
6186 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL); in btrfs_drop_snapshot()
6200 btrfs_node_key_to_cpu(path->nodes[wc->drop_level], in btrfs_drop_snapshot()
6202 path->slots[wc->drop_level]); in btrfs_drop_snapshot()
6245 btrfs_release_path(path); in btrfs_drop_snapshot()
6256 ret = btrfs_find_root(tree_root, &root->root_key, path, in btrfs_drop_snapshot()
6293 btrfs_free_path(path); in btrfs_drop_snapshot()
6334 BTRFS_PATH_AUTO_FREE(path); in btrfs_drop_subtree()
6342 path = btrfs_alloc_path(); in btrfs_drop_subtree()
6343 if (!path) in btrfs_drop_subtree()
6353 path->nodes[parent_level] = parent; in btrfs_drop_subtree()
6354 path->slots[parent_level] = btrfs_header_nritems(parent); in btrfs_drop_subtree()
6358 path->nodes[level] = node; in btrfs_drop_subtree()
6359 path->slots[level] = 0; in btrfs_drop_subtree()
6360 path->locks[level] = BTRFS_WRITE_LOCK; in btrfs_drop_subtree()
6372 ret = walk_down_tree(trans, root, path, wc); in btrfs_drop_subtree()
6376 ret = walk_up_tree(trans, root, path, wc, parent_level); in btrfs_drop_subtree()