Lines Matching refs:root

235 static bool reloc_root_is_dead(const struct btrfs_root *root)  in reloc_root_is_dead()  argument
243 if (test_bit(BTRFS_ROOT_DEAD_RELOC_TREE, &root->state)) in reloc_root_is_dead()
256 static bool have_reloc_root(const struct btrfs_root *root) in have_reloc_root() argument
258 if (reloc_root_is_dead(root)) in have_reloc_root()
260 if (!root->reloc_root) in have_reloc_root()
265 bool btrfs_should_ignore_reloc_root(const struct btrfs_root *root) in btrfs_should_ignore_reloc_root() argument
269 if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state)) in btrfs_should_ignore_reloc_root()
273 if (reloc_root_is_dead(root)) in btrfs_should_ignore_reloc_root()
276 reloc_root = root->reloc_root; in btrfs_should_ignore_reloc_root()
281 root->fs_info->running_transaction->transid) in btrfs_should_ignore_reloc_root()
299 struct btrfs_root *root = NULL; in find_reloc_root() local
306 root = node->data; in find_reloc_root()
309 return btrfs_grab_root(root); in find_reloc_root()
467 static int __add_reloc_root(struct btrfs_root *root) in __add_reloc_root() argument
469 struct btrfs_fs_info *fs_info = root->fs_info; in __add_reloc_root()
478 node->bytenr = root->commit_root->start; in __add_reloc_root()
479 node->data = root; in __add_reloc_root()
492 list_add_tail(&root->root_list, &rc->reloc_roots); in __add_reloc_root()
500 static void __del_reloc_root(struct btrfs_root *root) in __del_reloc_root() argument
502 struct btrfs_fs_info *fs_info = root->fs_info; in __del_reloc_root()
508 if (rc && root->node) { in __del_reloc_root()
511 root->commit_root->start); in __del_reloc_root()
518 ASSERT(!node || (struct btrfs_root *)node->data == root); in __del_reloc_root()
530 if (!list_empty(&root->root_list)) { in __del_reloc_root()
532 list_del_init(&root->root_list); in __del_reloc_root()
536 btrfs_put_root(root); in __del_reloc_root()
544 static int __update_reloc_root(struct btrfs_root *root) in __update_reloc_root() argument
546 struct btrfs_fs_info *fs_info = root->fs_info; in __update_reloc_root()
553 root->commit_root->start); in __update_reloc_root()
562 BUG_ON((struct btrfs_root *)node->data != root); in __update_reloc_root()
565 node->bytenr = root->node->start; in __update_reloc_root()
575 struct btrfs_root *root, u64 objectid) in create_reloc_root() argument
577 struct btrfs_fs_info *fs_info = root->fs_info; in create_reloc_root()
593 if (btrfs_root_id(root) == objectid) { in create_reloc_root()
597 ret = btrfs_copy_root(trans, root, root->commit_root, &eb, in create_reloc_root()
610 commit_root_gen = btrfs_header_generation(root->commit_root); in create_reloc_root()
611 btrfs_set_root_last_snapshot(&root->root_item, commit_root_gen); in create_reloc_root()
620 ret = btrfs_copy_root(trans, root, root->node, &eb, in create_reloc_root()
632 memcpy(root_item, &root->root_item, sizeof(*root_item)); in create_reloc_root()
637 if (btrfs_root_id(root) == objectid) { in create_reloc_root()
678 struct btrfs_root *root) in btrfs_init_reloc_root() argument
680 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_init_reloc_root()
694 if (reloc_root_is_dead(root)) in btrfs_init_reloc_root()
705 if (root->reloc_root) { in btrfs_init_reloc_root()
706 reloc_root = root->reloc_root; in btrfs_init_reloc_root()
715 if (!rc->create_reloc_tree || btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID) in btrfs_init_reloc_root()
723 reloc_root = create_reloc_root(trans, root, btrfs_root_id(root)); in btrfs_init_reloc_root()
736 root->reloc_root = btrfs_grab_root(reloc_root); in btrfs_init_reloc_root()
744 struct btrfs_root *root) in btrfs_update_reloc_root() argument
746 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_update_reloc_root()
751 if (!have_reloc_root(root)) in btrfs_update_reloc_root()
754 reloc_root = root->reloc_root; in btrfs_update_reloc_root()
767 set_bit(BTRFS_ROOT_DEAD_RELOC_TREE, &root->state); in btrfs_update_reloc_root()
795 struct btrfs_root *root = BTRFS_I(reloc_inode)->root; in get_new_location() local
806 ret = btrfs_lookup_file_extent(NULL, root, path, in get_new_location()
843 struct btrfs_root *root, in replace_file_extents() argument
846 struct btrfs_fs_info *fs_info = root->fs_info; in replace_file_extents()
864 if (btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID) in replace_file_extents()
893 if (btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID) { in replace_file_extents()
895 inode = btrfs_find_first_inode(root, key.objectid); in replace_file_extents()
899 inode = btrfs_find_first_inode(root, key.objectid); in replace_file_extents()
944 ref.owning_root = btrfs_root_id(root); in replace_file_extents()
947 btrfs_root_id(root), false); in replace_file_extents()
958 ref.owning_root = btrfs_root_id(root); in replace_file_extents()
961 btrfs_root_id(root), false); in replace_file_extents()
1234 int walk_up_reloc_tree(struct btrfs_root *root, struct btrfs_path *path, in walk_up_reloc_tree() argument
1242 last_snapshot = btrfs_root_last_snapshot(&root->root_item); in walk_up_reloc_tree()
1271 int walk_down_reloc_tree(struct btrfs_root *root, struct btrfs_path *path, in walk_down_reloc_tree() argument
1280 last_snapshot = btrfs_root_last_snapshot(&root->root_item); in walk_down_reloc_tree()
1316 static int invalidate_extent_cache(struct btrfs_root *root, in invalidate_extent_cache() argument
1320 struct btrfs_fs_info *fs_info = root->fs_info; in invalidate_extent_cache()
1337 inode = btrfs_find_first_inode(root, objectid); in invalidate_extent_cache()
1411 struct btrfs_root *root) in insert_dirty_subvol() argument
1413 struct btrfs_root *reloc_root = root->reloc_root; in insert_dirty_subvol()
1418 ASSERT(btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID); in insert_dirty_subvol()
1426 ret = btrfs_update_reloc_root(trans, root); in insert_dirty_subvol()
1430 if (list_empty(&root->reloc_dirty_list)) { in insert_dirty_subvol()
1431 btrfs_grab_root(root); in insert_dirty_subvol()
1432 list_add_tail(&root->reloc_dirty_list, &rc->dirty_subvol_roots); in insert_dirty_subvol()
1440 struct btrfs_root *root; in clean_dirty_subvols() local
1445 list_for_each_entry_safe(root, next, &rc->dirty_subvol_roots, in clean_dirty_subvols()
1447 if (btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID) { in clean_dirty_subvols()
1449 struct btrfs_root *reloc_root = root->reloc_root; in clean_dirty_subvols()
1451 list_del_init(&root->reloc_dirty_list); in clean_dirty_subvols()
1452 root->reloc_root = NULL; in clean_dirty_subvols()
1458 clear_bit(BTRFS_ROOT_DEAD_RELOC_TREE, &root->state); in clean_dirty_subvols()
1472 btrfs_put_root(root); in clean_dirty_subvols()
1475 ret2 = btrfs_drop_snapshot(root, 0, 1); in clean_dirty_subvols()
1477 btrfs_put_root(root); in clean_dirty_subvols()
1491 struct btrfs_root *root) in merge_reloc_root() argument
1513 reloc_root = root->reloc_root; in merge_reloc_root()
1559 trans = btrfs_start_transaction(root, 0); in merge_reloc_root()
1592 ret = replace_path(trans, rc, root, reloc_root, path, in merge_reloc_root()
1623 invalidate_extent_cache(root, &key, &next_key); in merge_reloc_root()
1630 leaf = btrfs_lock_root_node(root); in merge_reloc_root()
1631 ret = btrfs_cow_block(trans, root, leaf, NULL, 0, &leaf, in merge_reloc_root()
1639 ret = insert_dirty_subvol(trans, rc, root); in merge_reloc_root()
1650 invalidate_extent_cache(root, &key, &next_key); in merge_reloc_root()
1658 struct btrfs_root *root = rc->extent_root; in prepare_to_merge() local
1659 struct btrfs_fs_info *fs_info = root->fs_info; in prepare_to_merge()
1704 root = btrfs_get_fs_root(fs_info, reloc_root->root_key.offset, in prepare_to_merge()
1706 if (IS_ERR(root)) { in prepare_to_merge()
1712 btrfs_abort_transaction(trans, (int)PTR_ERR(root)); in prepare_to_merge()
1714 err = PTR_ERR(root); in prepare_to_merge()
1718 if (unlikely(root->reloc_root != reloc_root)) { in prepare_to_merge()
1719 if (root->reloc_root) { in prepare_to_merge()
1722 btrfs_root_id(root), in prepare_to_merge()
1723 btrfs_root_id(root->reloc_root), in prepare_to_merge()
1724 root->reloc_root->root_key.type, in prepare_to_merge()
1725 root->reloc_root->root_key.offset, in prepare_to_merge()
1727 &root->reloc_root->root_item), in prepare_to_merge()
1736 btrfs_root_id(root), in prepare_to_merge()
1744 btrfs_put_root(root); in prepare_to_merge()
1757 ret = btrfs_update_reloc_root(trans, root); in prepare_to_merge()
1764 btrfs_put_root(root); in prepare_to_merge()
1796 struct btrfs_root *root; in merge_reloc_roots() local
1802 root = rc->extent_root; in merge_reloc_roots()
1819 root = btrfs_get_fs_root(fs_info, reloc_root->root_key.offset, in merge_reloc_roots()
1822 if (WARN_ON(IS_ERR(root))) { in merge_reloc_roots()
1831 ret = PTR_ERR(root); in merge_reloc_roots()
1834 if (WARN_ON(root->reloc_root != reloc_root)) { in merge_reloc_roots()
1842 ret = merge_reloc_root(rc, root); in merge_reloc_roots()
1843 btrfs_put_root(root); in merge_reloc_roots()
1851 if (!IS_ERR(root)) { in merge_reloc_roots()
1852 if (root->reloc_root == reloc_root) { in merge_reloc_roots()
1853 root->reloc_root = NULL; in merge_reloc_roots()
1857 &root->state); in merge_reloc_roots()
1858 btrfs_put_root(root); in merge_reloc_roots()
1916 struct btrfs_root *root; in record_reloc_root_in_trans() local
1922 root = btrfs_get_fs_root(fs_info, reloc_root->root_key.offset, false); in record_reloc_root_in_trans()
1932 if (IS_ERR(root)) { in record_reloc_root_in_trans()
1934 return PTR_ERR(root); in record_reloc_root_in_trans()
1936 if (root->reloc_root != reloc_root) { in record_reloc_root_in_trans()
1941 btrfs_put_root(root); in record_reloc_root_in_trans()
1944 ret = btrfs_record_root_in_trans(trans, root); in record_reloc_root_in_trans()
1945 btrfs_put_root(root); in record_reloc_root_in_trans()
1957 struct btrfs_root *root; in select_reloc_root() local
1962 root = next->root; in select_reloc_root()
1975 if (unlikely(!root)) { in select_reloc_root()
1981 if (unlikely(!test_bit(BTRFS_ROOT_SHAREABLE, &root->state))) { in select_reloc_root()
1988 if (btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID) { in select_reloc_root()
1989 ret = record_reloc_root_in_trans(trans, root); in select_reloc_root()
1995 ret = btrfs_record_root_in_trans(trans, root); in select_reloc_root()
1998 root = root->reloc_root; in select_reloc_root()
2004 if (!root) in select_reloc_root()
2021 next->new_bytenr = root->node->start; in select_reloc_root()
2022 btrfs_put_root(next->root); in select_reloc_root()
2023 next->root = btrfs_grab_root(root); in select_reloc_root()
2024 ASSERT(next->root); in select_reloc_root()
2035 return root; in select_reloc_root()
2051 struct btrfs_root *root; in select_one_root() local
2060 root = next->root; in select_one_root()
2066 if (!root) in select_one_root()
2070 if (!test_bit(BTRFS_ROOT_SHAREABLE, &root->state)) in select_one_root()
2071 return root; in select_one_root()
2073 if (btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID) in select_one_root()
2074 fs_root = root; in select_one_root()
2184 struct btrfs_root *root; in do_relocation() local
2203 root = select_reloc_root(trans, rc, upper, edges); in do_relocation()
2204 if (IS_ERR(root)) { in do_relocation()
2205 ret = PTR_ERR(root); in do_relocation()
2223 ret = btrfs_search_slot(trans, root, key, path, 0, 1); in do_relocation()
2254 btrfs_err(root->fs_info, in do_relocation()
2266 blocksize = root->fs_info->nodesize; in do_relocation()
2275 ret = btrfs_cow_block(trans, root, eb, upper->eb, in do_relocation()
2303 btrfs_root_id(root), false); in do_relocation()
2306 ret = btrfs_drop_subtree(trans, root, eb, in do_relocation()
2452 struct btrfs_root *root; in relocate_tree_block() local
2467 root = select_one_root(node); in relocate_tree_block()
2468 if (IS_ERR(root)) { in relocate_tree_block()
2469 ret = PTR_ERR(root); in relocate_tree_block()
2480 if (root) { in relocate_tree_block()
2481 if (test_bit(BTRFS_ROOT_SHAREABLE, &root->state)) { in relocate_tree_block()
2496 btrfs_err(root->fs_info, in relocate_tree_block()
2502 ret = btrfs_record_root_in_trans(trans, root); in relocate_tree_block()
2509 if (!root->reloc_root) { in relocate_tree_block()
2513 root = root->reloc_root; in relocate_tree_block()
2514 node->new_bytenr = root->node->start; in relocate_tree_block()
2515 btrfs_put_root(node->root); in relocate_tree_block()
2516 node->root = btrfs_grab_root(root); in relocate_tree_block()
2517 ASSERT(node->root); in relocate_tree_block()
2519 btrfs_err(root->fs_info, in relocate_tree_block()
2541 struct btrfs_root *root; in relocate_cowonly_block() local
2546 root = btrfs_get_fs_root(fs_info, block->owner, true); in relocate_cowonly_block()
2547 if (IS_ERR(root)) in relocate_cowonly_block()
2548 return PTR_ERR(root); in relocate_cowonly_block()
2550 nr_levels = max(btrfs_header_level(root->node) - block->level, 0) + 1; in relocate_cowonly_block()
2555 btrfs_put_root(root); in relocate_cowonly_block()
2559 if (root == root->fs_info->chunk_root) in relocate_cowonly_block()
2562 ret = btrfs_search_slot(trans, root, &block->key, path, 0, 1); in relocate_cowonly_block()
2566 if (root == root->fs_info->chunk_root) in relocate_cowonly_block()
2570 btrfs_put_root(root); in relocate_cowonly_block()
2679 struct btrfs_fs_info *fs_info = inode->root->fs_info; in prealloc_file_extent_cluster()
2754 btrfs_free_reserved_data_space_noquota(inode->root->fs_info, in prealloc_file_extent_cluster()
3012 struct btrfs_root *root = BTRFS_I(inode)->root; in relocate_data_extent() local
3032 if (cluster->nr > 0 && cluster->owning_root != root->relocation_src_root) { in relocate_data_extent()
3033 u64 tmp = root->relocation_src_root; in relocate_data_extent()
3040 root->relocation_src_root = cluster->owning_root; in relocate_data_extent()
3046 root->relocation_src_root = tmp; in relocate_data_extent()
3051 cluster->owning_root = root->relocation_src_root; in relocate_data_extent()
3247 struct btrfs_root *root = fs_info->tree_root; in delete_block_group_cache() local
3255 btrfs_inode = btrfs_iget(ino, root); in delete_block_group_cache()
3266 trans = btrfs_join_transaction(root); in delete_block_group_cache()
3587 struct btrfs_root *root = BTRFS_I(rc->data_inode)->root; in relocate_block_group() local
3592 root->relocation_src_root = owning_root_id; in relocate_block_group()
3703 struct btrfs_root *root, u64 objectid) in __insert_orphan_inode() argument
3714 ret = btrfs_insert_empty_inode(trans, root, path, objectid); in __insert_orphan_inode()
3732 struct btrfs_root *root, u64 objectid) in delete_orphan_inode() argument
3747 ret = btrfs_search_slot(trans, root, &key, path, -1, 1); in delete_orphan_inode()
3753 ret = btrfs_del_item(trans, root, path); in delete_orphan_inode()
3770 struct btrfs_root *root; in create_reloc_inode() local
3774 root = btrfs_grab_root(fs_info->data_reloc_root); in create_reloc_inode()
3775 trans = btrfs_start_transaction(root, 6); in create_reloc_inode()
3777 btrfs_put_root(root); in create_reloc_inode()
3781 ret = btrfs_get_free_objectid(root, &objectid); in create_reloc_inode()
3785 ret = __insert_orphan_inode(trans, root, objectid); in create_reloc_inode()
3789 inode = btrfs_iget(objectid, root); in create_reloc_inode()
3791 delete_orphan_inode(trans, root, objectid); in create_reloc_inode()
3800 btrfs_put_root(root); in create_reloc_inode()
4060 static noinline_for_stack int mark_garbage_root(struct btrfs_root *root) in mark_garbage_root() argument
4062 struct btrfs_fs_info *fs_info = root->fs_info; in mark_garbage_root()
4070 memset(&root->root_item.drop_progress, 0, in mark_garbage_root()
4071 sizeof(root->root_item.drop_progress)); in mark_garbage_root()
4072 btrfs_set_root_drop_level(&root->root_item, 0); in mark_garbage_root()
4073 btrfs_set_root_refs(&root->root_item, 0); in mark_garbage_root()
4075 &root->root_key, &root->root_item); in mark_garbage_root()
4266 struct btrfs_fs_info *fs_info = inode->root->fs_info; in btrfs_reloc_clone_csums()
4306 struct btrfs_root *root, in btrfs_reloc_cow_block() argument
4310 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_reloc_cow_block()
4321 BUG_ON(rc->stage == UPDATE_DATA_PTRS && btrfs_is_data_reloc_root(root)); in btrfs_reloc_cow_block()
4325 btrfs_root_last_snapshot(&root->root_item)) in btrfs_reloc_cow_block()
4328 if (btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID && rc->create_reloc_tree) { in btrfs_reloc_cow_block()
4364 ret = replace_file_extents(trans, rc, root, cow); in btrfs_reloc_cow_block()
4375 struct btrfs_root *root = pending->root; in btrfs_reloc_pre_snapshot() local
4376 struct reloc_control *rc = root->fs_info->reloc_ctl; in btrfs_reloc_pre_snapshot()
4378 if (!rc || !have_reloc_root(root)) in btrfs_reloc_pre_snapshot()
4384 root = root->reloc_root; in btrfs_reloc_pre_snapshot()
4385 BUG_ON(btrfs_root_refs(&root->root_item) == 0); in btrfs_reloc_pre_snapshot()
4410 struct btrfs_root *root = pending->root; in btrfs_reloc_post_snapshot() local
4413 struct reloc_control *rc = root->fs_info->reloc_ctl; in btrfs_reloc_post_snapshot()
4416 if (!rc || !have_reloc_root(root)) in btrfs_reloc_post_snapshot()
4419 rc = root->fs_info->reloc_ctl; in btrfs_reloc_post_snapshot()
4431 reloc_root = create_reloc_root(trans, root->reloc_root, btrfs_root_id(new_root)); in btrfs_reloc_post_snapshot()