Lines Matching refs:path
102 static int find_next_key(struct btrfs_path *path, int level,
404 struct btrfs_path *path; in caching_thread() local
418 path = btrfs_alloc_path(); in caching_thread()
419 if (!path) in caching_thread()
439 path->skip_locking = 1; in caching_thread()
440 path->search_commit_root = 1; in caching_thread()
441 path->reada = 1; in caching_thread()
452 ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0); in caching_thread()
456 leaf = path->nodes[0]; in caching_thread()
465 if (path->slots[0] < nritems) { in caching_thread()
466 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in caching_thread()
468 ret = find_next_key(path, 0, &key); in caching_thread()
476 btrfs_release_path(path); in caching_thread()
483 ret = btrfs_next_leaf(extent_root, path); in caching_thread()
488 leaf = path->nodes[0]; in caching_thread()
500 btrfs_release_path(path); in caching_thread()
505 path->slots[0]++; in caching_thread()
530 path->slots[0]++; in caching_thread()
559 btrfs_free_path(path); in caching_thread()
781 struct btrfs_path *path; in btrfs_lookup_data_extent() local
783 path = btrfs_alloc_path(); in btrfs_lookup_data_extent()
784 if (!path) in btrfs_lookup_data_extent()
790 ret = btrfs_search_slot(NULL, root->fs_info->extent_root, &key, path, in btrfs_lookup_data_extent()
792 btrfs_free_path(path); in btrfs_lookup_data_extent()
811 struct btrfs_path *path; in btrfs_lookup_extent_info() local
829 path = btrfs_alloc_path(); in btrfs_lookup_extent_info()
830 if (!path) in btrfs_lookup_extent_info()
834 path->skip_locking = 1; in btrfs_lookup_extent_info()
835 path->search_commit_root = 1; in btrfs_lookup_extent_info()
847 &key, path, 0, 0); in btrfs_lookup_extent_info()
852 if (path->slots[0]) { in btrfs_lookup_extent_info()
853 path->slots[0]--; in btrfs_lookup_extent_info()
854 btrfs_item_key_to_cpu(path->nodes[0], &key, in btrfs_lookup_extent_info()
855 path->slots[0]); in btrfs_lookup_extent_info()
864 leaf = path->nodes[0]; in btrfs_lookup_extent_info()
865 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in btrfs_lookup_extent_info()
867 ei = btrfs_item_ptr(leaf, path->slots[0], in btrfs_lookup_extent_info()
875 ei0 = btrfs_item_ptr(leaf, path->slots[0], in btrfs_lookup_extent_info()
902 btrfs_release_path(path); in btrfs_lookup_extent_info()
931 btrfs_free_path(path); in btrfs_lookup_extent_info()
1044 struct btrfs_path *path, in convert_extent_item_v0() argument
1058 leaf = path->nodes[0]; in convert_extent_item_v0()
1059 BUG_ON(btrfs_item_size_nr(leaf, path->slots[0]) != sizeof(*ei0)); in convert_extent_item_v0()
1061 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in convert_extent_item_v0()
1062 ei0 = btrfs_item_ptr(leaf, path->slots[0], in convert_extent_item_v0()
1068 if (path->slots[0] >= btrfs_header_nritems(leaf)) { in convert_extent_item_v0()
1069 ret = btrfs_next_leaf(root, path); in convert_extent_item_v0()
1073 leaf = path->nodes[0]; in convert_extent_item_v0()
1076 path->slots[0]); in convert_extent_item_v0()
1079 path->slots[0]++; in convert_extent_item_v0()
1082 ref0 = btrfs_item_ptr(leaf, path->slots[0], in convert_extent_item_v0()
1088 btrfs_release_path(path); in convert_extent_item_v0()
1094 ret = btrfs_search_slot(trans, root, &key, path, in convert_extent_item_v0()
1100 btrfs_extend_item(root, path, new_size); in convert_extent_item_v0()
1102 leaf = path->nodes[0]; in convert_extent_item_v0()
1103 item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in convert_extent_item_v0()
1160 struct btrfs_path *path, in lookup_extent_data_ref() argument
1184 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_extent_data_ref()
1195 btrfs_release_path(path); in lookup_extent_data_ref()
1196 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_extent_data_ref()
1207 leaf = path->nodes[0]; in lookup_extent_data_ref()
1210 if (path->slots[0] >= nritems) { in lookup_extent_data_ref()
1211 ret = btrfs_next_leaf(root, path); in lookup_extent_data_ref()
1217 leaf = path->nodes[0]; in lookup_extent_data_ref()
1222 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in lookup_extent_data_ref()
1227 ref = btrfs_item_ptr(leaf, path->slots[0], in lookup_extent_data_ref()
1233 btrfs_release_path(path); in lookup_extent_data_ref()
1239 path->slots[0]++; in lookup_extent_data_ref()
1247 struct btrfs_path *path, in insert_extent_data_ref() argument
1270 ret = btrfs_insert_empty_item(trans, root, path, &key, size); in insert_extent_data_ref()
1274 leaf = path->nodes[0]; in insert_extent_data_ref()
1277 ref = btrfs_item_ptr(leaf, path->slots[0], in insert_extent_data_ref()
1289 ref = btrfs_item_ptr(leaf, path->slots[0], in insert_extent_data_ref()
1294 btrfs_release_path(path); in insert_extent_data_ref()
1296 ret = btrfs_insert_empty_item(trans, root, path, &key, in insert_extent_data_ref()
1301 leaf = path->nodes[0]; in insert_extent_data_ref()
1303 ref = btrfs_item_ptr(leaf, path->slots[0], in insert_extent_data_ref()
1320 btrfs_release_path(path); in insert_extent_data_ref()
1326 struct btrfs_path *path, in remove_extent_data_ref() argument
1336 leaf = path->nodes[0]; in remove_extent_data_ref()
1337 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in remove_extent_data_ref()
1340 ref1 = btrfs_item_ptr(leaf, path->slots[0], in remove_extent_data_ref()
1344 ref2 = btrfs_item_ptr(leaf, path->slots[0], in remove_extent_data_ref()
1350 ref0 = btrfs_item_ptr(leaf, path->slots[0], in remove_extent_data_ref()
1362 ret = btrfs_del_item(trans, root, path); in remove_extent_data_ref()
1372 ref0 = btrfs_item_ptr(leaf, path->slots[0], in remove_extent_data_ref()
1382 static noinline u32 extent_data_ref_count(struct btrfs_path *path, in extent_data_ref_count() argument
1391 leaf = path->nodes[0]; in extent_data_ref_count()
1392 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in extent_data_ref_count()
1403 ref1 = btrfs_item_ptr(leaf, path->slots[0], in extent_data_ref_count()
1407 ref2 = btrfs_item_ptr(leaf, path->slots[0], in extent_data_ref_count()
1413 ref0 = btrfs_item_ptr(leaf, path->slots[0], in extent_data_ref_count()
1425 struct btrfs_path *path, in lookup_tree_block_ref() argument
1441 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_tree_block_ref()
1446 btrfs_release_path(path); in lookup_tree_block_ref()
1448 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in lookup_tree_block_ref()
1458 struct btrfs_path *path, in insert_tree_block_ref() argument
1474 ret = btrfs_insert_empty_item(trans, root, path, &key, 0); in insert_tree_block_ref()
1475 btrfs_release_path(path); in insert_tree_block_ref()
1496 static int find_next_key(struct btrfs_path *path, int level, in find_next_key() argument
1501 if (!path->nodes[level]) in find_next_key()
1503 if (path->slots[level] + 1 >= in find_next_key()
1504 btrfs_header_nritems(path->nodes[level])) in find_next_key()
1507 btrfs_item_key_to_cpu(path->nodes[level], key, in find_next_key()
1508 path->slots[level] + 1); in find_next_key()
1510 btrfs_node_key_to_cpu(path->nodes[level], key, in find_next_key()
1511 path->slots[level] + 1); in find_next_key()
1533 struct btrfs_path *path, in lookup_inline_extent_backref() argument
1562 path->keep_locks = 1; in lookup_inline_extent_backref()
1576 ret = btrfs_search_slot(trans, root, &key, path, extra_size, 1); in lookup_inline_extent_backref()
1588 if (path->slots[0]) { in lookup_inline_extent_backref()
1589 path->slots[0]--; in lookup_inline_extent_backref()
1590 btrfs_item_key_to_cpu(path->nodes[0], &key, in lookup_inline_extent_backref()
1591 path->slots[0]); in lookup_inline_extent_backref()
1601 btrfs_release_path(path); in lookup_inline_extent_backref()
1614 leaf = path->nodes[0]; in lookup_inline_extent_backref()
1615 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in lookup_inline_extent_backref()
1622 ret = convert_extent_item_v0(trans, root, path, owner, in lookup_inline_extent_backref()
1628 leaf = path->nodes[0]; in lookup_inline_extent_backref()
1629 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in lookup_inline_extent_backref()
1634 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in lookup_inline_extent_backref()
1704 if (find_next_key(path, 0, &key) == 0 && in lookup_inline_extent_backref()
1714 path->keep_locks = 0; in lookup_inline_extent_backref()
1715 btrfs_unlock_up_safe(path, 1); in lookup_inline_extent_backref()
1725 struct btrfs_path *path, in setup_inline_extent_backref() argument
1740 leaf = path->nodes[0]; in setup_inline_extent_backref()
1741 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in setup_inline_extent_backref()
1747 btrfs_extend_item(root, path, size); in setup_inline_extent_backref()
1749 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in setup_inline_extent_backref()
1757 end = (unsigned long)ei + btrfs_item_size_nr(leaf, path->slots[0]); in setup_inline_extent_backref()
1786 struct btrfs_path *path, in lookup_extent_backref() argument
1793 ret = lookup_inline_extent_backref(trans, root, path, ref_ret, in lookup_extent_backref()
1799 btrfs_release_path(path); in lookup_extent_backref()
1803 ret = lookup_tree_block_ref(trans, root, path, bytenr, parent, in lookup_extent_backref()
1806 ret = lookup_extent_data_ref(trans, root, path, bytenr, parent, in lookup_extent_backref()
1817 struct btrfs_path *path, in update_inline_extent_backref() argument
1834 leaf = path->nodes[0]; in update_inline_extent_backref()
1835 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in update_inline_extent_backref()
1867 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in update_inline_extent_backref()
1874 btrfs_truncate_item(root, path, item_size, 1); in update_inline_extent_backref()
1882 struct btrfs_path *path, in insert_inline_extent_backref() argument
1891 ret = lookup_inline_extent_backref(trans, root, path, &iref, in insert_inline_extent_backref()
1896 update_inline_extent_backref(root, path, iref, in insert_inline_extent_backref()
1899 setup_inline_extent_backref(root, path, iref, parent, in insert_inline_extent_backref()
1909 struct btrfs_path *path, in insert_extent_backref() argument
1916 ret = insert_tree_block_ref(trans, root, path, bytenr, in insert_extent_backref()
1919 ret = insert_extent_data_ref(trans, root, path, bytenr, in insert_extent_backref()
1928 struct btrfs_path *path, in remove_extent_backref() argument
1936 update_inline_extent_backref(root, path, iref, in remove_extent_backref()
1939 ret = remove_extent_data_ref(trans, root, path, refs_to_drop, in remove_extent_backref()
1943 ret = btrfs_del_item(trans, root, path); in remove_extent_backref()
2105 struct btrfs_path *path; in __btrfs_inc_extent_ref() local
2114 path = btrfs_alloc_path(); in __btrfs_inc_extent_ref()
2115 if (!path) in __btrfs_inc_extent_ref()
2118 path->reada = 1; in __btrfs_inc_extent_ref()
2119 path->leave_spinning = 1; in __btrfs_inc_extent_ref()
2121 ret = insert_inline_extent_backref(trans, fs_info->extent_root, path, in __btrfs_inc_extent_ref()
2133 leaf = path->nodes[0]; in __btrfs_inc_extent_ref()
2134 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in __btrfs_inc_extent_ref()
2135 item = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in __btrfs_inc_extent_ref()
2142 btrfs_release_path(path); in __btrfs_inc_extent_ref()
2144 path->reada = 1; in __btrfs_inc_extent_ref()
2145 path->leave_spinning = 1; in __btrfs_inc_extent_ref()
2148 path, bytenr, parent, root_objectid, in __btrfs_inc_extent_ref()
2153 btrfs_free_path(path); in __btrfs_inc_extent_ref()
2228 struct btrfs_path *path; in run_delayed_extent_op() local
2242 path = btrfs_alloc_path(); in run_delayed_extent_op()
2243 if (!path) in run_delayed_extent_op()
2257 path->reada = 1; in run_delayed_extent_op()
2258 path->leave_spinning = 1; in run_delayed_extent_op()
2260 path, 0, 1); in run_delayed_extent_op()
2267 if (path->slots[0] > 0) { in run_delayed_extent_op()
2268 path->slots[0]--; in run_delayed_extent_op()
2269 btrfs_item_key_to_cpu(path->nodes[0], &key, in run_delayed_extent_op()
2270 path->slots[0]); in run_delayed_extent_op()
2277 btrfs_release_path(path); in run_delayed_extent_op()
2291 leaf = path->nodes[0]; in run_delayed_extent_op()
2292 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in run_delayed_extent_op()
2296 path, (u64)-1, 0); in run_delayed_extent_op()
2301 leaf = path->nodes[0]; in run_delayed_extent_op()
2302 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in run_delayed_extent_op()
2306 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in run_delayed_extent_op()
2311 btrfs_free_path(path); in run_delayed_extent_op()
3005 struct btrfs_path *path, in check_delayed_ref() argument
3026 btrfs_release_path(path); in check_delayed_ref()
3067 struct btrfs_path *path, in check_committed_ref() argument
3083 ret = btrfs_search_slot(NULL, extent_root, &key, path, 0, 0); in check_committed_ref()
3089 if (path->slots[0] == 0) in check_committed_ref()
3092 path->slots[0]--; in check_committed_ref()
3093 leaf = path->nodes[0]; in check_committed_ref()
3094 btrfs_item_key_to_cpu(leaf, &key, path->slots[0]); in check_committed_ref()
3100 item_size = btrfs_item_size_nr(leaf, path->slots[0]); in check_committed_ref()
3107 ei = btrfs_item_ptr(leaf, path->slots[0], struct btrfs_extent_item); in check_committed_ref()
3140 struct btrfs_path *path; in btrfs_cross_ref_exist() local
3144 path = btrfs_alloc_path(); in btrfs_cross_ref_exist()
3145 if (!path) in btrfs_cross_ref_exist()
3149 ret = check_committed_ref(trans, root, path, objectid, in btrfs_cross_ref_exist()
3154 ret2 = check_delayed_ref(trans, root, path, objectid, in btrfs_cross_ref_exist()
3166 btrfs_free_path(path); in btrfs_cross_ref_exist()
3260 struct btrfs_path *path, in write_one_cache_group() argument
3268 ret = btrfs_search_slot(trans, extent_root, &cache->key, path, 0, 1); in write_one_cache_group()
3275 leaf = path->nodes[0]; in write_one_cache_group()
3276 bi = btrfs_item_ptr_offset(leaf, path->slots[0]); in write_one_cache_group()
3280 btrfs_release_path(path); in write_one_cache_group()
3317 struct btrfs_path *path) in cache_save_setup() argument
3341 inode = lookup_free_space_inode(root, block_group, path); in cache_save_setup()
3344 btrfs_release_path(path); in cache_save_setup()
3355 ret = create_free_space_inode(root, trans, block_group, path); in cache_save_setup()
3462 btrfs_release_path(path); in cache_save_setup()
3478 struct btrfs_path *path; in btrfs_setup_space_cache() local
3484 path = btrfs_alloc_path(); in btrfs_setup_space_cache()
3485 if (!path) in btrfs_setup_space_cache()
3492 cache_save_setup(cache, trans, path); in btrfs_setup_space_cache()
3495 btrfs_free_path(path); in btrfs_setup_space_cache()
3518 struct btrfs_path *path = NULL; in btrfs_start_dirty_block_groups() local
3539 if (!path) { in btrfs_start_dirty_block_groups()
3540 path = btrfs_alloc_path(); in btrfs_start_dirty_block_groups()
3541 if (!path) in btrfs_start_dirty_block_groups()
3563 &cache->io_ctl, path, in btrfs_start_dirty_block_groups()
3583 cache_save_setup(cache, trans, path); in btrfs_start_dirty_block_groups()
3587 ret = btrfs_write_out_cache(root, trans, cache, path); in btrfs_start_dirty_block_groups()
3606 ret = write_one_cache_group(trans, root, path, cache); in btrfs_start_dirty_block_groups()
3667 btrfs_free_path(path); in btrfs_start_dirty_block_groups()
3678 struct btrfs_path *path; in btrfs_write_dirty_block_groups() local
3682 path = btrfs_alloc_path(); in btrfs_write_dirty_block_groups()
3683 if (!path) in btrfs_write_dirty_block_groups()
3705 &cache->io_ctl, path, in btrfs_write_dirty_block_groups()
3717 cache_save_setup(cache, trans, path); in btrfs_write_dirty_block_groups()
3724 ret = btrfs_write_out_cache(root, trans, cache, path); in btrfs_write_dirty_block_groups()
3738 ret = write_one_cache_group(trans, root, path, cache); in btrfs_write_dirty_block_groups()
3753 &cache->io_ctl, path, cache->key.objectid); in btrfs_write_dirty_block_groups()
3757 btrfs_free_path(path); in btrfs_write_dirty_block_groups()
6421 struct btrfs_path *path; in __btrfs_free_extent() local
6440 path = btrfs_alloc_path(); in __btrfs_free_extent()
6441 if (!path) in __btrfs_free_extent()
6444 path->reada = 1; in __btrfs_free_extent()
6445 path->leave_spinning = 1; in __btrfs_free_extent()
6453 ret = lookup_extent_backref(trans, extent_root, path, &iref, in __btrfs_free_extent()
6458 extent_slot = path->slots[0]; in __btrfs_free_extent()
6460 btrfs_item_key_to_cpu(path->nodes[0], &key, in __btrfs_free_extent()
6474 if (path->slots[0] - extent_slot > 5) in __btrfs_free_extent()
6479 item_size = btrfs_item_size_nr(path->nodes[0], extent_slot); in __btrfs_free_extent()
6485 ret = remove_extent_backref(trans, extent_root, path, in __btrfs_free_extent()
6492 btrfs_release_path(path); in __btrfs_free_extent()
6493 path->leave_spinning = 1; in __btrfs_free_extent()
6505 &key, path, -1, 1); in __btrfs_free_extent()
6506 if (ret > 0 && skinny_metadata && path->slots[0]) { in __btrfs_free_extent()
6511 path->slots[0]--; in __btrfs_free_extent()
6512 btrfs_item_key_to_cpu(path->nodes[0], &key, in __btrfs_free_extent()
6513 path->slots[0]); in __btrfs_free_extent()
6525 btrfs_release_path(path); in __btrfs_free_extent()
6527 &key, path, -1, 1); in __btrfs_free_extent()
6535 path->nodes[0]); in __btrfs_free_extent()
6541 extent_slot = path->slots[0]; in __btrfs_free_extent()
6544 btrfs_print_leaf(extent_root, path->nodes[0]); in __btrfs_free_extent()
6556 leaf = path->nodes[0]; in __btrfs_free_extent()
6560 BUG_ON(found_extent || extent_slot != path->slots[0]); in __btrfs_free_extent()
6561 ret = convert_extent_item_v0(trans, extent_root, path, in __btrfs_free_extent()
6568 btrfs_release_path(path); in __btrfs_free_extent()
6569 path->leave_spinning = 1; in __btrfs_free_extent()
6575 ret = btrfs_search_slot(trans, extent_root, &key, path, in __btrfs_free_extent()
6580 btrfs_print_leaf(extent_root, path->nodes[0]); in __btrfs_free_extent()
6587 extent_slot = path->slots[0]; in __btrfs_free_extent()
6588 leaf = path->nodes[0]; in __btrfs_free_extent()
6627 ret = remove_extent_backref(trans, extent_root, path, in __btrfs_free_extent()
6640 extent_data_ref_count(path, iref)); in __btrfs_free_extent()
6642 BUG_ON(path->slots[0] != extent_slot); in __btrfs_free_extent()
6644 BUG_ON(path->slots[0] != extent_slot + 1); in __btrfs_free_extent()
6645 path->slots[0] = extent_slot; in __btrfs_free_extent()
6651 ret = btrfs_del_items(trans, extent_root, path, path->slots[0], in __btrfs_free_extent()
6657 btrfs_release_path(path); in __btrfs_free_extent()
6673 btrfs_release_path(path); in __btrfs_free_extent()
6676 btrfs_free_path(path); in __btrfs_free_extent()
7627 struct btrfs_path *path; in alloc_reserved_file_extent() local
7639 path = btrfs_alloc_path(); in alloc_reserved_file_extent()
7640 if (!path) in alloc_reserved_file_extent()
7643 path->leave_spinning = 1; in alloc_reserved_file_extent()
7644 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path, in alloc_reserved_file_extent()
7647 btrfs_free_path(path); in alloc_reserved_file_extent()
7651 leaf = path->nodes[0]; in alloc_reserved_file_extent()
7652 extent_item = btrfs_item_ptr(leaf, path->slots[0], in alloc_reserved_file_extent()
7675 btrfs_mark_buffer_dirty(path->nodes[0]); in alloc_reserved_file_extent()
7676 btrfs_free_path(path); in alloc_reserved_file_extent()
7699 struct btrfs_path *path; in alloc_reserved_tree_block() local
7709 path = btrfs_alloc_path(); in alloc_reserved_tree_block()
7710 if (!path) { in alloc_reserved_tree_block()
7716 path->leave_spinning = 1; in alloc_reserved_tree_block()
7717 ret = btrfs_insert_empty_item(trans, fs_info->extent_root, path, in alloc_reserved_tree_block()
7720 btrfs_free_path(path); in alloc_reserved_tree_block()
7726 leaf = path->nodes[0]; in alloc_reserved_tree_block()
7727 extent_item = btrfs_item_ptr(leaf, path->slots[0], in alloc_reserved_tree_block()
7756 btrfs_free_path(path); in alloc_reserved_tree_block()
8035 struct btrfs_path *path) in reada_walk_down() argument
8049 if (path->slots[wc->level] < wc->reada_slot) { in reada_walk_down()
8058 eb = path->nodes[wc->level]; in reada_walk_down()
8062 for (slot = path->slots[wc->level]; slot < nritems; slot++) { in reada_walk_down()
8070 if (slot == path->slots[wc->level]) in reada_walk_down()
8196 struct btrfs_path *path, int root_level) in adjust_slots_upwards() argument
8206 eb = path->nodes[level]; in adjust_slots_upwards()
8208 path->slots[level]++; in adjust_slots_upwards()
8209 slot = path->slots[level]; in adjust_slots_upwards()
8217 btrfs_tree_unlock_rw(eb, path->locks[level]); in adjust_slots_upwards()
8218 path->locks[level] = 0; in adjust_slots_upwards()
8221 path->nodes[level] = NULL; in adjust_slots_upwards()
8222 path->slots[level] = 0; in adjust_slots_upwards()
8236 eb = path->nodes[root_level]; in adjust_slots_upwards()
8237 if (path->slots[root_level] >= btrfs_header_nritems(eb)) in adjust_slots_upwards()
8255 struct btrfs_path *path = NULL; in account_shared_subtree() local
8274 path = btrfs_alloc_path(); in account_shared_subtree()
8275 if (!path) in account_shared_subtree()
8288 path->nodes[root_level] = root_eb; in account_shared_subtree()
8289 path->slots[root_level] = 0; in account_shared_subtree()
8290 path->locks[root_level] = 0; /* so release_path doesn't try to unlock */ in account_shared_subtree()
8294 if (path->nodes[level] == NULL) { in account_shared_subtree()
8301 eb = path->nodes[level + 1]; in account_shared_subtree()
8302 parent_slot = path->slots[level + 1]; in account_shared_subtree()
8316 path->nodes[level] = eb; in account_shared_subtree()
8317 path->slots[level] = 0; in account_shared_subtree()
8321 path->locks[level] = BTRFS_READ_LOCK_BLOCKING; in account_shared_subtree()
8330 ret = account_leaf_items(trans, root, path->nodes[level]); in account_shared_subtree()
8335 ret = adjust_slots_upwards(root, path, root_level); in account_shared_subtree()
8348 btrfs_free_path(path); in account_shared_subtree()
8363 struct btrfs_path *path, in walk_down_proc() argument
8367 struct extent_buffer *eb = path->nodes[level]; in walk_down_proc()
8382 BUG_ON(!path->locks[level]); in walk_down_proc()
8397 if (path->locks[level] && !wc->keep_locks) { in walk_down_proc()
8398 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
8399 path->locks[level] = 0; in walk_down_proc()
8406 BUG_ON(!path->locks[level]); in walk_down_proc()
8422 if (path->locks[level] && level > 0) { in walk_down_proc()
8423 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_down_proc()
8424 path->locks[level] = 0; in walk_down_proc()
8444 struct btrfs_path *path, in do_walk_down() argument
8458 generation = btrfs_node_ptr_generation(path->nodes[level], in do_walk_down()
8459 path->slots[level]); in do_walk_down()
8471 bytenr = btrfs_node_blockptr(path->nodes[level], path->slots[level]); in do_walk_down()
8511 btrfs_node_key_to_cpu(path->nodes[level], &key, in do_walk_down()
8512 path->slots[level]); in do_walk_down()
8535 reada_walk_down(trans, root, wc, path); in do_walk_down()
8549 path->nodes[level] = next; in do_walk_down()
8550 path->slots[level] = 0; in do_walk_down()
8551 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in do_walk_down()
8561 parent = path->nodes[level]->start; in do_walk_down()
8564 btrfs_header_owner(path->nodes[level])); in do_walk_down()
8603 struct btrfs_path *path, in walk_up_proc() argument
8608 struct extent_buffer *eb = path->nodes[level]; in walk_up_proc()
8616 ret = find_next_key(path, level + 1, &wc->update_progress); in walk_up_proc()
8622 path->slots[level] = 0; in walk_up_proc()
8629 if (!path->locks[level]) { in walk_up_proc()
8633 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in walk_up_proc()
8640 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
8641 path->locks[level] = 0; in walk_up_proc()
8646 btrfs_tree_unlock_rw(eb, path->locks[level]); in walk_up_proc()
8647 path->locks[level] = 0; in walk_up_proc()
8654 BUG_ON(wc->refs[level] > 1 && !path->locks[level]); in walk_up_proc()
8673 if (!path->locks[level] && in walk_up_proc()
8677 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in walk_up_proc()
8690 parent = path->nodes[level + 1]->start; in walk_up_proc()
8693 btrfs_header_owner(path->nodes[level + 1])); in walk_up_proc()
8705 struct btrfs_path *path, in walk_down_tree() argument
8713 ret = walk_down_proc(trans, root, path, wc, lookup_info); in walk_down_tree()
8720 if (path->slots[level] >= in walk_down_tree()
8721 btrfs_header_nritems(path->nodes[level])) in walk_down_tree()
8724 ret = do_walk_down(trans, root, path, wc, &lookup_info); in walk_down_tree()
8726 path->slots[level]++; in walk_down_tree()
8737 struct btrfs_path *path, in walk_up_tree() argument
8743 path->slots[level] = btrfs_header_nritems(path->nodes[level]); in walk_up_tree()
8744 while (level < max_level && path->nodes[level]) { in walk_up_tree()
8746 if (path->slots[level] + 1 < in walk_up_tree()
8747 btrfs_header_nritems(path->nodes[level])) { in walk_up_tree()
8748 path->slots[level]++; in walk_up_tree()
8751 ret = walk_up_proc(trans, root, path, wc); in walk_up_tree()
8755 if (path->locks[level]) { in walk_up_tree()
8756 btrfs_tree_unlock_rw(path->nodes[level], in walk_up_tree()
8757 path->locks[level]); in walk_up_tree()
8758 path->locks[level] = 0; in walk_up_tree()
8760 free_extent_buffer(path->nodes[level]); in walk_up_tree()
8761 path->nodes[level] = NULL; in walk_up_tree()
8785 struct btrfs_path *path; in btrfs_drop_snapshot() local
8798 path = btrfs_alloc_path(); in btrfs_drop_snapshot()
8799 if (!path) { in btrfs_drop_snapshot()
8806 btrfs_free_path(path); in btrfs_drop_snapshot()
8822 path->nodes[level] = btrfs_lock_root_node(root); in btrfs_drop_snapshot()
8823 btrfs_set_lock_blocking(path->nodes[level]); in btrfs_drop_snapshot()
8824 path->slots[level] = 0; in btrfs_drop_snapshot()
8825 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in btrfs_drop_snapshot()
8835 path->lowest_level = level; in btrfs_drop_snapshot()
8836 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0); in btrfs_drop_snapshot()
8837 path->lowest_level = 0; in btrfs_drop_snapshot()
8848 btrfs_unlock_up_safe(path, 0); in btrfs_drop_snapshot()
8852 btrfs_tree_lock(path->nodes[level]); in btrfs_drop_snapshot()
8853 btrfs_set_lock_blocking(path->nodes[level]); in btrfs_drop_snapshot()
8854 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in btrfs_drop_snapshot()
8857 path->nodes[level]->start, in btrfs_drop_snapshot()
8869 btrfs_tree_unlock(path->nodes[level]); in btrfs_drop_snapshot()
8870 path->locks[level] = 0; in btrfs_drop_snapshot()
8886 ret = walk_down_tree(trans, root, path, wc); in btrfs_drop_snapshot()
8892 ret = walk_up_tree(trans, root, path, wc, BTRFS_MAX_LEVEL); in btrfs_drop_snapshot()
8905 btrfs_node_key(path->nodes[level], in btrfs_drop_snapshot()
8907 path->slots[level]); in btrfs_drop_snapshot()
8939 btrfs_release_path(path); in btrfs_drop_snapshot()
8950 ret = btrfs_find_root(tree_root, &root->root_key, path, in btrfs_drop_snapshot()
8979 btrfs_free_path(path); in btrfs_drop_snapshot()
9006 struct btrfs_path *path; in btrfs_drop_subtree() local
9015 path = btrfs_alloc_path(); in btrfs_drop_subtree()
9016 if (!path) in btrfs_drop_subtree()
9021 btrfs_free_path(path); in btrfs_drop_subtree()
9028 path->nodes[parent_level] = parent; in btrfs_drop_subtree()
9029 path->slots[parent_level] = btrfs_header_nritems(parent); in btrfs_drop_subtree()
9033 path->nodes[level] = node; in btrfs_drop_subtree()
9034 path->slots[level] = 0; in btrfs_drop_subtree()
9035 path->locks[level] = BTRFS_WRITE_LOCK_BLOCKING; in btrfs_drop_subtree()
9048 wret = walk_down_tree(trans, root, path, wc); in btrfs_drop_subtree()
9054 wret = walk_up_tree(trans, root, path, wc, parent_level); in btrfs_drop_subtree()
9062 btrfs_free_path(path); in btrfs_drop_subtree()
9437 struct btrfs_path *path, struct btrfs_key *key) in find_first_block_group() argument
9444 ret = btrfs_search_slot(NULL, root, key, path, 0, 0); in find_first_block_group()
9449 slot = path->slots[0]; in find_first_block_group()
9450 leaf = path->nodes[0]; in find_first_block_group()
9452 ret = btrfs_next_leaf(root, path); in find_first_block_group()
9466 path->slots[0]++; in find_first_block_group()
9679 struct btrfs_path *path; in btrfs_read_block_groups() local
9694 path = btrfs_alloc_path(); in btrfs_read_block_groups()
9695 if (!path) in btrfs_read_block_groups()
9697 path->reada = 1; in btrfs_read_block_groups()
9707 ret = find_first_block_group(root, path, &key); in btrfs_read_block_groups()
9713 leaf = path->nodes[0]; in btrfs_read_block_groups()
9714 btrfs_item_key_to_cpu(leaf, &found_key, path->slots[0]); in btrfs_read_block_groups()
9739 btrfs_item_ptr_offset(leaf, path->slots[0]), in btrfs_read_block_groups()
9744 btrfs_release_path(path); in btrfs_read_block_groups()
9851 btrfs_free_path(path); in btrfs_read_block_groups()
10007 struct btrfs_path *path; in btrfs_remove_block_group() local
10056 path = btrfs_alloc_path(); in btrfs_remove_block_group()
10057 if (!path) { in btrfs_remove_block_group()
10066 inode = lookup_free_space_inode(tree_root, block_group, path); in btrfs_remove_block_group()
10081 &block_group->io_ctl, path, in btrfs_remove_block_group()
10119 ret = btrfs_search_slot(trans, tree_root, &key, path, -1, 1); in btrfs_remove_block_group()
10123 btrfs_release_path(path); in btrfs_remove_block_group()
10125 ret = btrfs_del_item(trans, tree_root, path); in btrfs_remove_block_group()
10128 btrfs_release_path(path); in btrfs_remove_block_group()
10286 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in btrfs_remove_block_group()
10292 ret = btrfs_del_item(trans, root, path); in btrfs_remove_block_group()
10294 btrfs_free_path(path); in btrfs_remove_block_group()