Lines Matching refs:path
58 static int find_next_key(struct btrfs_path *path, int level,
92 struct btrfs_path *path; in btrfs_lookup_data_extent() local
94 path = btrfs_alloc_path(); in btrfs_lookup_data_extent()
95 if (!path) in btrfs_lookup_data_extent()
101 ret = btrfs_search_slot(NULL, fs_info->extent_root, &key, path, 0, 0); in btrfs_lookup_data_extent()
102 btrfs_free_path(path); in btrfs_lookup_data_extent()
121 struct btrfs_path *path; in btrfs_lookup_extent_info() local
139 path = btrfs_alloc_path(); in btrfs_lookup_extent_info()
140 if (!path) in btrfs_lookup_extent_info()
144 path->skip_locking = 1; in btrfs_lookup_extent_info()
145 path->search_commit_root = 1; in btrfs_lookup_extent_info()
156 ret = btrfs_search_slot(NULL, fs_info->extent_root, &key, path, 0, 0); in btrfs_lookup_extent_info()
161 if (path->slots[0]) { in btrfs_lookup_extent_info()
162 path->slots[0]--; in btrfs_lookup_extent_info()
163 btrfs_item_key_to_cpu(path->nodes[0], &key, in btrfs_lookup_extent_info()
164 path->slots[0]); in btrfs_lookup_extent_info()
173 leaf = path->nodes[0]; in btrfs_lookup_extent_info()
174 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in btrfs_lookup_extent_info()
176 ei = btrfs_item_ptr(leaf, path->slots[0], in btrfs_lookup_extent_info()
209 btrfs_release_path(path); in btrfs_lookup_extent_info()
238 btrfs_free_path(path); in btrfs_lookup_extent_info()
441 struct btrfs_path *path, in lookup_extent_data_ref() argument
466 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_extent_data_ref()
478 leaf = path->nodes[0]; in lookup_extent_data_ref()
481 if (path->slots[0] >= nritems) { in lookup_extent_data_ref()
482 ret = btrfs_next_leaf(root, path); in lookup_extent_data_ref()
488 leaf = path->nodes[0]; in lookup_extent_data_ref()
493 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in lookup_extent_data_ref()
498 ref = btrfs_item_ptr(leaf, path->slots[0], in lookup_extent_data_ref()
504 btrfs_release_path(path); in lookup_extent_data_ref()
510 path->slots[0]++; in lookup_extent_data_ref()
517 struct btrfs_path *path, in insert_extent_data_ref() argument
541 ret = btrfs_insert_empty_item(trans, root, path, &key, size); in insert_extent_data_ref()
545 leaf = path->nodes[0]; in insert_extent_data_ref()
548 ref = btrfs_item_ptr(leaf, path->slots[0], in insert_extent_data_ref()
560 ref = btrfs_item_ptr(leaf, path->slots[0], in insert_extent_data_ref()
565 btrfs_release_path(path); in insert_extent_data_ref()
567 ret = btrfs_insert_empty_item(trans, root, path, &key, in insert_extent_data_ref()
572 leaf = path->nodes[0]; in insert_extent_data_ref()
574 ref = btrfs_item_ptr(leaf, path->slots[0], in insert_extent_data_ref()
591 btrfs_release_path(path); in insert_extent_data_ref()
596 struct btrfs_path *path, in remove_extent_data_ref() argument
606 leaf = path->nodes[0]; in remove_extent_data_ref()
607 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in remove_extent_data_ref()
610 ref1 = btrfs_item_ptr(leaf, path->slots[0], in remove_extent_data_ref()
614 ref2 = btrfs_item_ptr(leaf, path->slots[0], in remove_extent_data_ref()
629 ret = btrfs_del_item(trans, trans->fs_info->extent_root, path); in remove_extent_data_ref()
641 static noinline u32 extent_data_ref_count(struct btrfs_path *path, in extent_data_ref_count() argument
651 leaf = path->nodes[0]; in extent_data_ref_count()
652 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in extent_data_ref_count()
670 ref1 = btrfs_item_ptr(leaf, path->slots[0], in extent_data_ref_count()
674 ref2 = btrfs_item_ptr(leaf, path->slots[0], in extent_data_ref_count()
684 struct btrfs_path *path, in lookup_tree_block_ref() argument
701 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_tree_block_ref()
708 struct btrfs_path *path, in insert_tree_block_ref() argument
725 path, &key, 0); in insert_tree_block_ref()
726 btrfs_release_path(path); in insert_tree_block_ref()
747 static int find_next_key(struct btrfs_path *path, int level, in find_next_key() argument
752 if (!path->nodes[level]) in find_next_key()
754 if (path->slots[level] + 1 >= in find_next_key()
755 btrfs_header_nritems(path->nodes[level])) in find_next_key()
758 btrfs_item_key_to_cpu(path->nodes[level], key, in find_next_key()
759 path->slots[level] + 1); in find_next_key()
761 btrfs_node_key_to_cpu(path->nodes[level], key, in find_next_key()
762 path->slots[level] + 1); in find_next_key()
783 struct btrfs_path *path, in lookup_inline_extent_backref() argument
814 path->search_for_extension = 1; in lookup_inline_extent_backref()
815 path->keep_locks = 1; in lookup_inline_extent_backref()
829 ret = btrfs_search_slot(trans, root, &key, path, extra_size, 1); in lookup_inline_extent_backref()
841 if (path->slots[0]) { in lookup_inline_extent_backref()
842 path->slots[0]--; in lookup_inline_extent_backref()
843 btrfs_item_key_to_cpu(path->nodes[0], &key, in lookup_inline_extent_backref()
844 path->slots[0]); in lookup_inline_extent_backref()
854 btrfs_release_path(path); in lookup_inline_extent_backref()
863 btrfs_print_leaf(path->nodes[0]); in lookup_inline_extent_backref()
872 leaf = path->nodes[0]; in lookup_inline_extent_backref()
873 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in lookup_inline_extent_backref()
881 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in lookup_inline_extent_backref()
961 if (find_next_key(path, 0, &key) == 0 && in lookup_inline_extent_backref()
971 path->keep_locks = 0; in lookup_inline_extent_backref()
972 path->search_for_extension = 0; in lookup_inline_extent_backref()
973 btrfs_unlock_up_safe(path, 1); in lookup_inline_extent_backref()
983 struct btrfs_path *path, in setup_inline_extent_backref() argument
998 leaf = path->nodes[0]; in setup_inline_extent_backref()
999 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in setup_inline_extent_backref()
1005 btrfs_extend_item(path, size); in setup_inline_extent_backref()
1007 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in setup_inline_extent_backref()
1015 end = (unsigned long)ei + btrfs_item_size_nr(leaf, path->slots[0]); in setup_inline_extent_backref()
1043 struct btrfs_path *path, in lookup_extent_backref() argument
1050 ret = lookup_inline_extent_backref(trans, path, ref_ret, bytenr, in lookup_extent_backref()
1056 btrfs_release_path(path); in lookup_extent_backref()
1060 ret = lookup_tree_block_ref(trans, path, bytenr, parent, in lookup_extent_backref()
1063 ret = lookup_extent_data_ref(trans, path, bytenr, parent, in lookup_extent_backref()
1073 void update_inline_extent_backref(struct btrfs_path *path, in update_inline_extent_backref() argument
1079 struct extent_buffer *leaf = path->nodes[0]; in update_inline_extent_backref()
1090 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in update_inline_extent_backref()
1127 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in update_inline_extent_backref()
1134 btrfs_truncate_item(path, item_size, 1); in update_inline_extent_backref()
1141 struct btrfs_path *path, in insert_inline_extent_backref() argument
1150 ret = lookup_inline_extent_backref(trans, path, &iref, bytenr, in insert_inline_extent_backref()
1165 "path->slots[0]=%d path->nodes[0]:", path->slots[0]); in insert_inline_extent_backref()
1166 btrfs_print_leaf(path->nodes[0]); in insert_inline_extent_backref()
1170 update_inline_extent_backref(path, iref, refs_to_add, in insert_inline_extent_backref()
1173 setup_inline_extent_backref(trans->fs_info, path, iref, parent, in insert_inline_extent_backref()
1182 struct btrfs_path *path, in remove_extent_backref() argument
1190 update_inline_extent_backref(path, iref, -refs_to_drop, NULL, in remove_extent_backref()
1193 ret = remove_extent_data_ref(trans, path, refs_to_drop, in remove_extent_backref()
1197 ret = btrfs_del_item(trans, trans->fs_info->extent_root, path); in remove_extent_backref()
1460 struct btrfs_path *path; in __btrfs_inc_extent_ref() local
1469 path = btrfs_alloc_path(); in __btrfs_inc_extent_ref()
1470 if (!path) in __btrfs_inc_extent_ref()
1474 ret = insert_inline_extent_backref(trans, path, bytenr, num_bytes, in __btrfs_inc_extent_ref()
1485 leaf = path->nodes[0]; in __btrfs_inc_extent_ref()
1486 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in __btrfs_inc_extent_ref()
1487 item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in __btrfs_inc_extent_ref()
1494 btrfs_release_path(path); in __btrfs_inc_extent_ref()
1499 ret = insert_tree_block_ref(trans, path, bytenr, parent, in __btrfs_inc_extent_ref()
1502 ret = insert_extent_data_ref(trans, path, bytenr, parent, in __btrfs_inc_extent_ref()
1509 btrfs_free_path(path); in __btrfs_inc_extent_ref()
1582 struct btrfs_path *path; in run_delayed_extent_op() local
1596 path = btrfs_alloc_path(); in run_delayed_extent_op()
1597 if (!path) in run_delayed_extent_op()
1611 ret = btrfs_search_slot(trans, fs_info->extent_root, &key, path, 0, 1); in run_delayed_extent_op()
1618 if (path->slots[0] > 0) { in run_delayed_extent_op()
1619 path->slots[0]--; in run_delayed_extent_op()
1620 btrfs_item_key_to_cpu(path->nodes[0], &key, in run_delayed_extent_op()
1621 path->slots[0]); in run_delayed_extent_op()
1628 btrfs_release_path(path); in run_delayed_extent_op()
1642 leaf = path->nodes[0]; in run_delayed_extent_op()
1643 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in run_delayed_extent_op()
1652 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in run_delayed_extent_op()
1657 btrfs_free_path(path); in run_delayed_extent_op()
2212 struct btrfs_path *path, in check_delayed_ref() argument
2244 btrfs_release_path(path); in check_delayed_ref()
2292 struct btrfs_path *path, in check_committed_ref() argument
2311 ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0); in check_committed_ref()
2317 if (path->slots[0] == 0) in check_committed_ref()
2320 path->slots[0]--; in check_committed_ref()
2321 leaf = path->nodes[0]; in check_committed_ref()
2322 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in check_committed_ref()
2328 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in check_committed_ref()
2329 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in check_committed_ref()
2369 struct btrfs_path *path; in btrfs_cross_ref_exist() local
2372 path = btrfs_alloc_path(); in btrfs_cross_ref_exist()
2373 if (!path) in btrfs_cross_ref_exist()
2377 ret = check_committed_ref(root, path, objectid, in btrfs_cross_ref_exist()
2382 ret = check_delayed_ref(root, path, objectid, offset, bytenr); in btrfs_cross_ref_exist()
2386 btrfs_free_path(path); in btrfs_cross_ref_exist()
2923 struct btrfs_path *path; in __btrfs_free_extent() local
2940 path = btrfs_alloc_path(); in __btrfs_free_extent()
2941 if (!path) in __btrfs_free_extent()
2958 ret = lookup_extent_backref(trans, path, &iref, bytenr, num_bytes, in __btrfs_free_extent()
2969 extent_slot = path->slots[0]; in __btrfs_free_extent()
2971 btrfs_item_key_to_cpu(path->nodes[0], &key, in __btrfs_free_extent()
2987 if (path->slots[0] - extent_slot > 5) in __btrfs_free_extent()
3000 ret = remove_extent_backref(trans, path, NULL, in __btrfs_free_extent()
3007 btrfs_release_path(path); in __btrfs_free_extent()
3020 &key, path, -1, 1); in __btrfs_free_extent()
3021 if (ret > 0 && skinny_metadata && path->slots[0]) { in __btrfs_free_extent()
3026 path->slots[0]--; in __btrfs_free_extent()
3027 btrfs_item_key_to_cpu(path->nodes[0], &key, in __btrfs_free_extent()
3028 path->slots[0]); in __btrfs_free_extent()
3040 btrfs_release_path(path); in __btrfs_free_extent()
3042 &key, path, -1, 1); in __btrfs_free_extent()
3050 btrfs_print_leaf(path->nodes[0]); in __btrfs_free_extent()
3056 extent_slot = path->slots[0]; in __btrfs_free_extent()
3059 btrfs_print_leaf(path->nodes[0]); in __btrfs_free_extent()
3071 leaf = path->nodes[0]; in __btrfs_free_extent()
3126 ret = remove_extent_backref(trans, path, iref, in __btrfs_free_extent()
3138 extent_data_ref_count(path, iref)) { in __btrfs_free_extent()
3141 extent_data_ref_count(path, iref), in __btrfs_free_extent()
3147 if (path->slots[0] != extent_slot) { in __btrfs_free_extent()
3162 if (path->slots[0] != extent_slot + 1) { in __btrfs_free_extent()
3168 path->slots[0] = extent_slot; in __btrfs_free_extent()
3174 ret = btrfs_del_items(trans, extent_root, path, path->slots[0], in __btrfs_free_extent()
3180 btrfs_release_path(path); in __btrfs_free_extent()
3203 btrfs_release_path(path); in __btrfs_free_extent()
3206 btrfs_free_path(path); in __btrfs_free_extent()
3215 path->slots[0], extent_slot); in __btrfs_free_extent()
3216 btrfs_print_leaf(path->nodes[0]); in __btrfs_free_extent()
3219 btrfs_free_path(path); in __btrfs_free_extent()
4560 struct btrfs_path *path; in alloc_reserved_file_extent() local
4572 path = btrfs_alloc_path(); in alloc_reserved_file_extent()
4573 if (!path) in alloc_reserved_file_extent()
4576 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path, in alloc_reserved_file_extent()
4579 btrfs_free_path(path); in alloc_reserved_file_extent()
4583 leaf = path->nodes[0]; in alloc_reserved_file_extent()
4584 extent_item = btrfs_item_ptr(leaf, path->slots[0], in alloc_reserved_file_extent()
4607 btrfs_mark_buffer_dirty(path->nodes[0]); in alloc_reserved_file_extent()
4608 btrfs_free_path(path); in alloc_reserved_file_extent()
4634 struct btrfs_path *path; in alloc_reserved_tree_block() local
4656 path = btrfs_alloc_path(); in alloc_reserved_tree_block()
4657 if (!path) in alloc_reserved_tree_block()
4660 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path, in alloc_reserved_tree_block()
4663 btrfs_free_path(path); in alloc_reserved_tree_block()
4667 leaf = path->nodes[0]; in alloc_reserved_tree_block()
4668 extent_item = btrfs_item_ptr(leaf, path->slots[0], in alloc_reserved_tree_block()
4695 btrfs_free_path(path); in alloc_reserved_tree_block()
4982 struct btrfs_path *path) in reada_walk_down() argument
4996 if (path->slots[wc->level] < wc->reada_slot) { in reada_walk_down()
5005 eb = path->nodes[wc->level]; in reada_walk_down()
5008 for (slot = path->slots[wc->level]; slot < nritems; slot++) { in reada_walk_down()
5016 if (slot == path->slots[wc->level]) in reada_walk_down()
5069 struct btrfs_path *path, in walk_down_proc() argument
5074 struct extent_buffer *eb = path->nodes[level]; in walk_down_proc()
5089 BUG_ON(!path->locks[level]); in walk_down_proc()
5104 if (path->locks[level] && !wc->keep_locks) { in walk_down_proc()
5105 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
5106 path->locks[level] = 0; in walk_down_proc()
5113 BUG_ON(!path->locks[level]); in walk_down_proc()
5128 if (path->locks[level] && level > 0) { in walk_down_proc()
5129 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
5130 path->locks[level] = 0; in walk_down_proc()
5143 struct btrfs_path *path; in check_ref_exists() local
5147 path = btrfs_alloc_path(); in check_ref_exists()
5148 if (!path) in check_ref_exists()
5151 ret = lookup_extent_backref(trans, path, &iref, bytenr, in check_ref_exists()
5154 btrfs_free_path(path); in check_ref_exists()
5177 struct btrfs_path *path, in do_walk_down() argument
5193 generation = btrfs_node_ptr_generation(path->nodes[level], in do_walk_down()
5194 path->slots[level]); in do_walk_down()
5206 bytenr = btrfs_node_blockptr(path->nodes[level], path->slots[level]); in do_walk_down()
5207 btrfs_node_key_to_cpu(path->nodes[level], &first_key, in do_walk_down()
5208 path->slots[level]); in do_walk_down()
5244 btrfs_node_key_to_cpu(path->nodes[level], &key, in do_walk_down()
5245 path->slots[level]); in do_walk_down()
5268 reada_walk_down(trans, root, wc, path); in do_walk_down()
5287 path->nodes[level] = next; in do_walk_down()
5288 path->slots[level] = 0; in do_walk_down()
5289 path->locks[level] = BTRFS_WRITE_LOCK; in do_walk_down()
5299 parent = path->nodes[level]->start; in do_walk_down()
5302 btrfs_header_owner(path->nodes[level])); in do_walk_down()
5304 btrfs_header_owner(path->nodes[level])) { in do_walk_down()
5353 find_next_key(path, level, &wc->drop_progress); in do_walk_down()
5388 struct btrfs_path *path, in walk_up_proc() argument
5394 struct extent_buffer *eb = path->nodes[level]; in walk_up_proc()
5402 ret = find_next_key(path, level + 1, &wc->update_progress); in walk_up_proc()
5408 path->slots[level] = 0; in walk_up_proc()
5415 if (!path->locks[level]) { in walk_up_proc()
5418 path->locks[level] = BTRFS_WRITE_LOCK; in walk_up_proc()
5425 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
5426 path->locks[level] = 0; in walk_up_proc()
5431 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
5432 path->locks[level] = 0; in walk_up_proc()
5439 BUG_ON(wc->refs[level] > 1 && !path->locks[level]); in walk_up_proc()
5458 if (!path->locks[level] && in walk_up_proc()
5461 path->locks[level] = BTRFS_WRITE_LOCK; in walk_up_proc()
5473 parent = path->nodes[level + 1]->start; in walk_up_proc()
5475 btrfs_header_owner(path->nodes[level + 1])) in walk_up_proc()
5494 struct btrfs_path *path, in walk_down_tree() argument
5502 ret = walk_down_proc(trans, root, path, wc, lookup_info); in walk_down_tree()
5509 if (path->slots[level] >= in walk_down_tree()
5510 btrfs_header_nritems(path->nodes[level])) in walk_down_tree()
5513 ret = do_walk_down(trans, root, path, wc, &lookup_info); in walk_down_tree()
5515 path->slots[level]++; in walk_down_tree()
5526 struct btrfs_path *path, in walk_up_tree() argument
5532 path->slots[level] = btrfs_header_nritems(path->nodes[level]); in walk_up_tree()
5533 while (level < max_level && path->nodes[level]) { in walk_up_tree()
5535 if (path->slots[level] + 1 < in walk_up_tree()
5536 btrfs_header_nritems(path->nodes[level])) { in walk_up_tree()
5537 path->slots[level]++; in walk_up_tree()
5540 ret = walk_up_proc(trans, root, path, wc); in walk_up_tree()
5546 if (path->locks[level]) { in walk_up_tree()
5547 btrfs_tree_unlock_rw(path->nodes[level], in walk_up_tree()
5548 path->locks[level]); in walk_up_tree()
5549 path->locks[level] = 0; in walk_up_tree()
5551 free_extent_buffer(path->nodes[level]); in walk_up_tree()
5552 path->nodes[level] = NULL; in walk_up_tree()
5575 struct btrfs_path *path; in btrfs_drop_snapshot() local
5589 path = btrfs_alloc_path(); in btrfs_drop_snapshot()
5590 if (!path) { in btrfs_drop_snapshot()
5597 btrfs_free_path(path); in btrfs_drop_snapshot()
5632 path->nodes[level] = btrfs_lock_root_node(root); in btrfs_drop_snapshot()
5633 path->slots[level] = 0; in btrfs_drop_snapshot()
5634 path->locks[level] = BTRFS_WRITE_LOCK; in btrfs_drop_snapshot()
5644 path->lowest_level = level; in btrfs_drop_snapshot()
5645 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_drop_snapshot()
5646 path->lowest_level = 0; in btrfs_drop_snapshot()
5657 btrfs_unlock_up_safe(path, 0); in btrfs_drop_snapshot()
5661 btrfs_tree_lock(path->nodes[level]); in btrfs_drop_snapshot()
5662 path->locks[level] = BTRFS_WRITE_LOCK; in btrfs_drop_snapshot()
5665 path->nodes[level]->start, in btrfs_drop_snapshot()
5677 btrfs_tree_unlock(path->nodes[level]); in btrfs_drop_snapshot()
5678 path->locks[level] = 0; in btrfs_drop_snapshot()
5694 ret = walk_down_tree(trans, root, path, wc); in btrfs_drop_snapshot()
5700 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL); in btrfs_drop_snapshot()
5713 btrfs_node_key_to_cpu(path->nodes[wc->drop_level], in btrfs_drop_snapshot()
5715 path->slots[wc->drop_level]); in btrfs_drop_snapshot()
5756 btrfs_release_path(path); in btrfs_drop_snapshot()
5768 ret = btrfs_find_root(tree_root, &root->root_key, path, in btrfs_drop_snapshot()
5802 btrfs_free_path(path); in btrfs_drop_snapshot()
5835 struct btrfs_path *path; in btrfs_drop_subtree() local
5844 path = btrfs_alloc_path(); in btrfs_drop_subtree()
5845 if (!path) in btrfs_drop_subtree()
5850 btrfs_free_path(path); in btrfs_drop_subtree()
5857 path->nodes[parent_level] = parent; in btrfs_drop_subtree()
5858 path->slots[parent_level] = btrfs_header_nritems(parent); in btrfs_drop_subtree()
5862 path->nodes[level] = node; in btrfs_drop_subtree()
5863 path->slots[level] = 0; in btrfs_drop_subtree()
5864 path->locks[level] = BTRFS_WRITE_LOCK; in btrfs_drop_subtree()
5876 wret = walk_down_tree(trans, root, path, wc); in btrfs_drop_subtree()
5882 wret = walk_up_tree(trans, root, path, wc, parent_level); in btrfs_drop_subtree()
5890 btrfs_free_path(path); in btrfs_drop_subtree()