Lines Matching full:root
47 #include "root-tree.h"
606 struct btrfs_root *root; in btrfs_alloc_root() local
608 root = kzalloc_obj(*root, flags); in btrfs_alloc_root()
609 if (!root) in btrfs_alloc_root()
612 root->fs_info = fs_info; in btrfs_alloc_root()
613 root->root_key.objectid = objectid; in btrfs_alloc_root()
614 RB_CLEAR_NODE(&root->rb_node); in btrfs_alloc_root()
616 xa_init(&root->inodes); in btrfs_alloc_root()
617 xa_init(&root->delayed_nodes); in btrfs_alloc_root()
619 btrfs_init_root_block_rsv(root); in btrfs_alloc_root()
621 INIT_LIST_HEAD(&root->dirty_list); in btrfs_alloc_root()
622 INIT_LIST_HEAD(&root->root_list); in btrfs_alloc_root()
623 INIT_LIST_HEAD(&root->delalloc_inodes); in btrfs_alloc_root()
624 INIT_LIST_HEAD(&root->delalloc_root); in btrfs_alloc_root()
625 INIT_LIST_HEAD(&root->ordered_extents); in btrfs_alloc_root()
626 INIT_LIST_HEAD(&root->ordered_root); in btrfs_alloc_root()
627 INIT_LIST_HEAD(&root->reloc_dirty_list); in btrfs_alloc_root()
628 spin_lock_init(&root->delalloc_lock); in btrfs_alloc_root()
629 spin_lock_init(&root->ordered_extent_lock); in btrfs_alloc_root()
630 spin_lock_init(&root->accounting_lock); in btrfs_alloc_root()
631 spin_lock_init(&root->qgroup_meta_rsv_lock); in btrfs_alloc_root()
632 mutex_init(&root->objectid_mutex); in btrfs_alloc_root()
633 mutex_init(&root->log_mutex); in btrfs_alloc_root()
634 mutex_init(&root->ordered_extent_mutex); in btrfs_alloc_root()
635 mutex_init(&root->delalloc_mutex); in btrfs_alloc_root()
636 init_waitqueue_head(&root->qgroup_flush_wait); in btrfs_alloc_root()
637 init_waitqueue_head(&root->log_writer_wait); in btrfs_alloc_root()
638 init_waitqueue_head(&root->log_commit_wait[0]); in btrfs_alloc_root()
639 init_waitqueue_head(&root->log_commit_wait[1]); in btrfs_alloc_root()
640 INIT_LIST_HEAD(&root->log_ctxs[0]); in btrfs_alloc_root()
641 INIT_LIST_HEAD(&root->log_ctxs[1]); in btrfs_alloc_root()
642 atomic_set(&root->log_commit[0], 0); in btrfs_alloc_root()
643 atomic_set(&root->log_commit[1], 0); in btrfs_alloc_root()
644 atomic_set(&root->log_writers, 0); in btrfs_alloc_root()
645 atomic_set(&root->log_batch, 0); in btrfs_alloc_root()
646 refcount_set(&root->refs, 1); in btrfs_alloc_root()
647 atomic_set(&root->snapshot_force_cow, 0); in btrfs_alloc_root()
648 atomic_set(&root->nr_swapfiles, 0); in btrfs_alloc_root()
649 root->log_transid_committed = -1; in btrfs_alloc_root()
651 btrfs_extent_io_tree_init(fs_info, &root->dirty_log_pages, in btrfs_alloc_root()
653 btrfs_extent_io_tree_init(fs_info, &root->log_csum_range, in btrfs_alloc_root()
657 spin_lock_init(&root->root_item_lock); in btrfs_alloc_root()
658 btrfs_qgroup_init_swapped_blocks(&root->swapped_blocks); in btrfs_alloc_root()
660 INIT_LIST_HEAD(&root->leak_list); in btrfs_alloc_root()
662 list_add_tail(&root->leak_list, &fs_info->allocated_roots); in btrfs_alloc_root()
666 return root; in btrfs_alloc_root()
673 struct btrfs_root *root; in btrfs_alloc_dummy_root() local
678 root = btrfs_alloc_root(fs_info, BTRFS_ROOT_TREE_OBJECTID, GFP_KERNEL); in btrfs_alloc_dummy_root()
679 if (!root) in btrfs_alloc_dummy_root()
683 root->alloc_bytenr = 0; in btrfs_alloc_dummy_root()
685 return root; in btrfs_alloc_dummy_root()
700 const struct btrfs_root *root = rb_entry(node, struct btrfs_root, rb_node); in global_root_key_cmp() local
702 return btrfs_comp_cpu_keys(key, &root->root_key); in global_root_key_cmp()
705 int btrfs_global_root_insert(struct btrfs_root *root) in btrfs_global_root_insert() argument
707 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_global_root_insert()
712 tmp = rb_find_add(&root->rb_node, &fs_info->global_root_tree, global_root_cmp); in btrfs_global_root_insert()
717 btrfs_warn(fs_info, "global root %llu %llu already exists", in btrfs_global_root_insert()
718 btrfs_root_id(root), root->root_key.offset); in btrfs_global_root_insert()
723 void btrfs_global_root_delete(struct btrfs_root *root) in btrfs_global_root_delete() argument
725 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_global_root_delete()
728 rb_erase(&root->rb_node, &fs_info->global_root_tree); in btrfs_global_root_delete()
736 struct btrfs_root *root = NULL; in btrfs_global_root() local
741 root = container_of(node, struct btrfs_root, rb_node); in btrfs_global_root()
744 return root; in btrfs_global_root()
796 struct btrfs_root *root; in btrfs_create_tree() local
805 root = btrfs_alloc_root(fs_info, objectid, GFP_KERNEL); in btrfs_create_tree()
807 if (!root) in btrfs_create_tree()
810 root->root_key.objectid = objectid; in btrfs_create_tree()
811 root->root_key.type = BTRFS_ROOT_ITEM_KEY; in btrfs_create_tree()
812 root->root_key.offset = 0; in btrfs_create_tree()
814 leaf = btrfs_alloc_tree_block(trans, root, 0, objectid, NULL, 0, 0, 0, in btrfs_create_tree()
822 root->node = leaf; in btrfs_create_tree()
825 root->commit_root = btrfs_root_node(root); in btrfs_create_tree()
826 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_create_tree()
828 btrfs_set_root_flags(&root->root_item, 0); in btrfs_create_tree()
829 btrfs_set_root_limit(&root->root_item, 0); in btrfs_create_tree()
830 btrfs_set_root_bytenr(&root->root_item, leaf->start); in btrfs_create_tree()
831 btrfs_set_root_generation(&root->root_item, trans->transid); in btrfs_create_tree()
832 btrfs_set_root_level(&root->root_item, 0); in btrfs_create_tree()
833 btrfs_set_root_refs(&root->root_item, 1); in btrfs_create_tree()
834 btrfs_set_root_used(&root->root_item, leaf->len); in btrfs_create_tree()
835 btrfs_set_root_last_snapshot(&root->root_item, 0); in btrfs_create_tree()
836 btrfs_set_root_dirid(&root->root_item, 0); in btrfs_create_tree()
838 generate_random_guid(root->root_item.uuid); in btrfs_create_tree()
840 export_guid(root->root_item.uuid, &guid_null); in btrfs_create_tree()
841 btrfs_set_root_drop_level(&root->root_item, 0); in btrfs_create_tree()
845 ret = btrfs_insert_root(trans, tree_root, &root->root_key, &root->root_item); in btrfs_create_tree()
849 return root; in btrfs_create_tree()
852 btrfs_put_root(root); in btrfs_create_tree()
859 struct btrfs_root *root; in alloc_log_tree() local
861 root = btrfs_alloc_root(fs_info, BTRFS_TREE_LOG_OBJECTID, GFP_NOFS); in alloc_log_tree()
862 if (!root) in alloc_log_tree()
865 root->root_key.objectid = BTRFS_TREE_LOG_OBJECTID; in alloc_log_tree()
866 root->root_key.type = BTRFS_ROOT_ITEM_KEY; in alloc_log_tree()
867 root->root_key.offset = BTRFS_TREE_LOG_OBJECTID; in alloc_log_tree()
869 return root; in alloc_log_tree()
873 struct btrfs_root *root) in btrfs_alloc_log_tree_node() argument
887 leaf = btrfs_alloc_tree_block(trans, root, 0, BTRFS_TREE_LOG_OBJECTID, in btrfs_alloc_log_tree_node()
892 root->node = leaf; in btrfs_alloc_log_tree_node()
894 btrfs_mark_buffer_dirty(trans, root->node); in btrfs_alloc_log_tree_node()
895 btrfs_tree_unlock(root->node); in btrfs_alloc_log_tree_node()
924 struct btrfs_root *root) in btrfs_add_log_tree() argument
926 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_add_log_tree()
942 log_root->root_key.offset = btrfs_root_id(root); in btrfs_add_log_tree()
954 WARN_ON(root->log_root); in btrfs_add_log_tree()
955 root->log_root = log_root; in btrfs_add_log_tree()
956 btrfs_set_root_log_transid(root, 0); in btrfs_add_log_tree()
957 root->log_transid_committed = -1; in btrfs_add_log_tree()
958 btrfs_set_root_last_log_commit(root, 0); in btrfs_add_log_tree()
966 struct btrfs_root *root; in read_tree_root_path() local
973 root = btrfs_alloc_root(fs_info, key->objectid, GFP_NOFS); in read_tree_root_path()
974 if (!root) in read_tree_root_path()
978 &root->root_item, &root->root_key); in read_tree_root_path()
985 generation = btrfs_root_generation(&root->root_item); in read_tree_root_path()
986 level = btrfs_root_level(&root->root_item); in read_tree_root_path()
990 root->node = read_tree_block(fs_info, btrfs_root_bytenr(&root->root_item), in read_tree_root_path()
992 if (IS_ERR(root->node)) { in read_tree_root_path()
993 ret = PTR_ERR(root->node); in read_tree_root_path()
994 root->node = NULL; in read_tree_root_path()
997 if (unlikely(!btrfs_buffer_uptodate(root->node, generation, false))) { in read_tree_root_path()
1003 * For real fs, and not log/reloc trees, root owner must in read_tree_root_path()
1004 * match its root node owner in read_tree_root_path()
1007 btrfs_root_id(root) != BTRFS_TREE_LOG_OBJECTID && in read_tree_root_path()
1008 btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID && in read_tree_root_path()
1009 btrfs_root_id(root) != btrfs_header_owner(root->node))) { in read_tree_root_path()
1011 "root=%llu block=%llu, tree root owner mismatch, have %llu expect %llu", in read_tree_root_path()
1012 btrfs_root_id(root), root->node->start, in read_tree_root_path()
1013 btrfs_header_owner(root->node), in read_tree_root_path()
1014 btrfs_root_id(root)); in read_tree_root_path()
1018 root->commit_root = btrfs_root_node(root); in read_tree_root_path()
1019 return root; in read_tree_root_path()
1021 btrfs_put_root(root); in read_tree_root_path()
1028 struct btrfs_root *root; in btrfs_read_tree_root() local
1034 root = read_tree_root_path(tree_root, path, key); in btrfs_read_tree_root()
1036 return root; in btrfs_read_tree_root()
1040 * Initialize subvolume root in-memory structure.
1042 * @anon_dev: anonymous device to attach to the root, if zero, allocate new
1046 static int btrfs_init_fs_root(struct btrfs_root *root, dev_t anon_dev) in btrfs_init_fs_root() argument
1050 btrfs_drew_lock_init(&root->snapshot_lock); in btrfs_init_fs_root()
1052 if (btrfs_root_id(root) != BTRFS_TREE_LOG_OBJECTID && in btrfs_init_fs_root()
1053 !btrfs_is_data_reloc_root(root) && in btrfs_init_fs_root()
1054 btrfs_is_fstree(btrfs_root_id(root))) { in btrfs_init_fs_root()
1055 set_bit(BTRFS_ROOT_SHAREABLE, &root->state); in btrfs_init_fs_root()
1056 btrfs_check_and_init_root_item(&root->root_item); in btrfs_init_fs_root()
1063 if (btrfs_is_fstree(btrfs_root_id(root)) && in btrfs_init_fs_root()
1064 btrfs_root_refs(&root->root_item) > 0) { in btrfs_init_fs_root()
1066 ret = get_anon_bdev(&root->anon_dev); in btrfs_init_fs_root()
1070 root->anon_dev = anon_dev; in btrfs_init_fs_root()
1074 mutex_lock(&root->objectid_mutex); in btrfs_init_fs_root()
1075 ret = btrfs_init_root_free_objectid(root); in btrfs_init_fs_root()
1077 mutex_unlock(&root->objectid_mutex); in btrfs_init_fs_root()
1081 ASSERT(root->free_objectid <= BTRFS_LAST_FREE_OBJECTID); in btrfs_init_fs_root()
1083 mutex_unlock(&root->objectid_mutex); in btrfs_init_fs_root()
1091 struct btrfs_root *root; in btrfs_lookup_fs_root() local
1094 root = radix_tree_lookup(&fs_info->fs_roots_radix, in btrfs_lookup_fs_root()
1096 root = btrfs_grab_root(root); in btrfs_lookup_fs_root()
1098 return root; in btrfs_lookup_fs_root()
1139 struct btrfs_root *root) in btrfs_insert_fs_root() argument
1149 (unsigned long)btrfs_root_id(root), in btrfs_insert_fs_root()
1150 root); in btrfs_insert_fs_root()
1152 btrfs_grab_root(root); in btrfs_insert_fs_root()
1153 set_bit(BTRFS_ROOT_IN_RADIX, &root->state); in btrfs_insert_fs_root()
1164 struct btrfs_root *root; in btrfs_check_leaked_roots() local
1169 root = list_first_entry(&fs_info->allocated_roots, in btrfs_check_leaked_roots()
1171 btrfs_err(fs_info, "leaked root %s refcount %d", in btrfs_check_leaked_roots()
1172 btrfs_root_name(&root->root_key, buf), in btrfs_check_leaked_roots()
1173 refcount_read(&root->refs)); in btrfs_check_leaked_roots()
1175 while (refcount_read(&root->refs) > 1) in btrfs_check_leaked_roots()
1176 btrfs_put_root(root); in btrfs_check_leaked_roots()
1177 btrfs_put_root(root); in btrfs_check_leaked_roots()
1184 struct btrfs_root *root; in free_global_roots() local
1188 root = rb_entry(node, struct btrfs_root, rb_node); in free_global_roots()
1189 rb_erase(&root->rb_node, &fs_info->global_root_tree); in free_global_roots()
1190 btrfs_put_root(root); in free_global_roots()
1232 * Get an in-memory reference of a root structure.
1234 * For essential trees like root/extent tree, we grab it from fs_info directly.
1238 * Caller should release the root by calling btrfs_put_root() after the usage.
1241 * same root objectid.
1243 * @objectid: root id
1246 * @check_ref: whether to check root item references, If true, return -ENOENT
1253 struct btrfs_root *root; in btrfs_get_root_ref() local
1258 root = btrfs_get_global_root(fs_info, objectid); in btrfs_get_root_ref()
1259 if (root) in btrfs_get_root_ref()
1260 return root; in btrfs_get_root_ref()
1272 root = btrfs_lookup_fs_root(fs_info, objectid); in btrfs_get_root_ref()
1273 if (root) { in btrfs_get_root_ref()
1285 if (check_ref && btrfs_root_refs(&root->root_item) == 0) { in btrfs_get_root_ref()
1286 btrfs_put_root(root); in btrfs_get_root_ref()
1289 return root; in btrfs_get_root_ref()
1295 root = btrfs_read_tree_root(fs_info->tree_root, &key); in btrfs_get_root_ref()
1296 if (IS_ERR(root)) in btrfs_get_root_ref()
1297 return root; in btrfs_get_root_ref()
1299 if (check_ref && btrfs_root_refs(&root->root_item) == 0) { in btrfs_get_root_ref()
1304 ret = btrfs_init_fs_root(root, anon_dev ? *anon_dev : 0); in btrfs_get_root_ref()
1322 set_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state); in btrfs_get_root_ref()
1324 ret = btrfs_insert_fs_root(fs_info, root); in btrfs_get_root_ref()
1327 btrfs_put_root(root); in btrfs_get_root_ref()
1332 return root; in btrfs_get_root_ref()
1337 * root's anon_dev to 0 to avoid a double free, once by btrfs_put_root() in btrfs_get_root_ref()
1341 root->anon_dev = 0; in btrfs_get_root_ref()
1342 btrfs_put_root(root); in btrfs_get_root_ref()
1347 * Get in-memory reference of a root structure
1360 * Get in-memory reference of a root structure, created as new, optionally pass
1374 * Return a root for the given objectid.
1382 * up a fs root that is not in memory. If the root is not in memory we will
1383 * read the tree root commit root and look up the fs root from there. This is a
1384 * temporary root, it will not be inserted into the radix tree as it doesn't
1386 * backref code is finished using the root.
1392 struct btrfs_root *root; in btrfs_get_fs_root_commit_root() local
1398 * This can return -ENOENT if we ask for a root that doesn't exist, but in btrfs_get_fs_root_commit_root()
1400 * up a root that doesn't exist, unless there's corruption. So if root in btrfs_get_fs_root_commit_root()
1403 root = btrfs_get_global_root(fs_info, objectid); in btrfs_get_fs_root_commit_root()
1404 if (root) in btrfs_get_fs_root_commit_root()
1405 return root; in btrfs_get_fs_root_commit_root()
1407 root = btrfs_lookup_fs_root(fs_info, objectid); in btrfs_get_fs_root_commit_root()
1408 if (root) in btrfs_get_fs_root_commit_root()
1409 return root; in btrfs_get_fs_root_commit_root()
1414 root = read_tree_root_path(fs_info->tree_root, path, &key); in btrfs_get_fs_root_commit_root()
1417 return root; in btrfs_get_fs_root_commit_root()
1503 struct btrfs_root *root = arg; in transaction_kthread() local
1504 struct btrfs_fs_info *fs_info = root->fs_info; in transaction_kthread()
1538 trans = btrfs_attach_transaction(root); in transaction_kthread()
1564 * This will find the highest generation in the array of root backups. The
1569 * generation of the latest root in the array with the generation
1590 * copy all the root pointers into the super backup array.
1676 * Reads a backup root based on the passed priority. Prio 0 is the newest, prio
1680 * @priority: priority of backup root required
1682 * Returns backup root index on success and -EINVAL otherwise.
1746 static void free_root_extent_buffers(struct btrfs_root *root) in free_root_extent_buffers() argument
1748 if (root) { in free_root_extent_buffers()
1749 free_extent_buffer(root->node); in free_root_extent_buffers()
1750 free_extent_buffer(root->commit_root); in free_root_extent_buffers()
1751 root->node = NULL; in free_root_extent_buffers()
1752 root->commit_root = NULL; in free_root_extent_buffers()
1758 struct btrfs_root *root, *tmp; in free_global_root_pointers() local
1760 rbtree_postorder_for_each_entry_safe(root, tmp, in free_global_root_pointers()
1763 free_root_extent_buffers(root); in free_global_root_pointers()
1784 void btrfs_put_root(struct btrfs_root *root) in btrfs_put_root() argument
1786 if (!root) in btrfs_put_root()
1789 if (refcount_dec_and_test(&root->refs)) { in btrfs_put_root()
1790 if (WARN_ON(!xa_empty(&root->inodes))) in btrfs_put_root()
1791 xa_destroy(&root->inodes); in btrfs_put_root()
1792 if (WARN_ON(!xa_empty(&root->delayed_nodes))) in btrfs_put_root()
1793 xa_destroy(&root->delayed_nodes); in btrfs_put_root()
1794 WARN_ON(test_bit(BTRFS_ROOT_DEAD_RELOC_TREE, &root->state)); in btrfs_put_root()
1795 if (root->anon_dev) in btrfs_put_root()
1796 free_anon_bdev(root->anon_dev); in btrfs_put_root()
1797 free_root_extent_buffers(root); in btrfs_put_root()
1799 spin_lock(&root->fs_info->fs_roots_radix_lock); in btrfs_put_root()
1800 list_del_init(&root->leak_list); in btrfs_put_root()
1801 spin_unlock(&root->fs_info->fs_roots_radix_lock); in btrfs_put_root()
1803 kfree(root); in btrfs_put_root()
1882 BTRFS_I(inode)->root = btrfs_grab_root(fs_info->tree_root); in btrfs_init_btree_inode()
2046 struct btrfs_root *root; in load_global_roots_objectid() local
2091 root = read_tree_root_path(tree_root, path, &key); in load_global_roots_objectid()
2092 if (IS_ERR(root)) { in load_global_roots_objectid()
2093 ret = PTR_ERR(root); in load_global_roots_objectid()
2096 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in load_global_roots_objectid()
2097 ret = btrfs_global_root_insert(root); in load_global_roots_objectid()
2099 btrfs_put_root(root); in load_global_roots_objectid()
2117 btrfs_err(fs_info, "failed to load root %s", name); in load_global_roots_objectid()
2150 struct btrfs_root *root; in btrfs_read_roots() local
2165 root = btrfs_read_tree_root(tree_root, &location); in btrfs_read_roots()
2166 if (IS_ERR(root)) { in btrfs_read_roots()
2168 ret = PTR_ERR(root); in btrfs_read_roots()
2172 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2173 fs_info->block_group_root = root; in btrfs_read_roots()
2178 root = btrfs_read_tree_root(tree_root, &location); in btrfs_read_roots()
2179 if (IS_ERR(root)) { in btrfs_read_roots()
2181 ret = PTR_ERR(root); in btrfs_read_roots()
2185 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2186 fs_info->dev_root = root; in btrfs_read_roots()
2195 root = fs_info->remap_root; in btrfs_read_roots()
2197 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2199 root->root_key.objectid = BTRFS_REMAP_TREE_OBJECTID; in btrfs_read_roots()
2200 root->root_key.type = BTRFS_ROOT_ITEM_KEY; in btrfs_read_roots()
2201 root->root_key.offset = 0; in btrfs_read_roots()
2205 root = btrfs_read_tree_root(fs_info->tree_root, &location); in btrfs_read_roots()
2206 if (!IS_ERR(root)) { in btrfs_read_roots()
2208 btrfs_put_root(root); in btrfs_read_roots()
2210 } else if (PTR_ERR(root) != -ENOENT) { in btrfs_read_roots()
2212 PTR_ERR(root)); in btrfs_read_roots()
2219 root = btrfs_get_fs_root(tree_root->fs_info, in btrfs_read_roots()
2221 if (IS_ERR(root)) { in btrfs_read_roots()
2224 ret = PTR_ERR(root); in btrfs_read_roots()
2228 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2229 fs_info->data_reloc_root = root; in btrfs_read_roots()
2234 root = btrfs_read_tree_root(tree_root, &location); in btrfs_read_roots()
2235 if (!IS_ERR(root)) { in btrfs_read_roots()
2236 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2237 fs_info->quota_root = root; in btrfs_read_roots()
2241 root = btrfs_read_tree_root(tree_root, &location); in btrfs_read_roots()
2242 if (IS_ERR(root)) { in btrfs_read_roots()
2244 ret = PTR_ERR(root); in btrfs_read_roots()
2249 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2250 fs_info->uuid_root = root; in btrfs_read_roots()
2255 root = btrfs_read_tree_root(tree_root, &location); in btrfs_read_roots()
2256 if (IS_ERR(root)) { in btrfs_read_roots()
2258 ret = PTR_ERR(root); in btrfs_read_roots()
2262 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2263 fs_info->stripe_root = root; in btrfs_read_roots()
2269 btrfs_warn(fs_info, "failed to read root (objectid=%llu): %d", in btrfs_read_roots()
2417 /* Root alignment check */ in btrfs_validate_super()
2616 static int load_super_root(struct btrfs_root *root, u64 bytenr, u64 gen, int level) in load_super_root() argument
2621 .owner_root = btrfs_root_id(root) in load_super_root()
2625 root->node = read_tree_block(root->fs_info, bytenr, &check); in load_super_root()
2626 if (IS_ERR(root->node)) { in load_super_root()
2627 ret = PTR_ERR(root->node); in load_super_root()
2628 root->node = NULL; in load_super_root()
2631 if (unlikely(!extent_buffer_uptodate(root->node))) { in load_super_root()
2632 free_extent_buffer(root->node); in load_super_root()
2633 root->node = NULL; in load_super_root()
2637 btrfs_set_root_node(&root->root_item, root->node); in load_super_root()
2638 root->commit_root = btrfs_root_node(root); in load_super_root()
2639 btrfs_set_root_refs(&root->root_item, 1); in load_super_root()
2654 btrfs_warn(fs_info, "couldn't read tree root"); in load_important_roots()
2664 btrfs_warn(fs_info, "couldn't read remap root"); in load_important_roots()
3093 * calling btrfs_orphan_cleanup() on the tree root. If we don't do it in btrfs_start_pre_rw_mount()
3094 * first, then btrfs_orphan_cleanup() will delete a dead root's orphan in btrfs_start_pre_rw_mount()
3095 * item before the root's tree is deleted - this means that if we unmount in btrfs_start_pre_rw_mount()
3380 btrfs_err(fs_info, "invalid superblock tree root bytenr"); in open_ctree()
3473 btrfs_err(fs_info, "failed to read chunk root"); in open_ctree()
3518 * If we have a uuid root and we're not being told to rescan we need to in open_ctree()
4144 /* Drop a fs root from the radix tree and free it. */
4146 struct btrfs_root *root) in btrfs_drop_and_free_fs_root() argument
4152 (unsigned long)btrfs_root_id(root)); in btrfs_drop_and_free_fs_root()
4153 if (test_and_clear_bit(BTRFS_ROOT_IN_RADIX, &root->state)) in btrfs_drop_and_free_fs_root()
4158 ASSERT(root->log_root == NULL); in btrfs_drop_and_free_fs_root()
4159 if (root->reloc_root) { in btrfs_drop_and_free_fs_root()
4160 btrfs_put_root(root->reloc_root); in btrfs_drop_and_free_fs_root()
4161 root->reloc_root = NULL; in btrfs_drop_and_free_fs_root()
4166 btrfs_put_root(root); in btrfs_drop_and_free_fs_root()
4562 static void btrfs_destroy_ordered_extents(struct btrfs_root *root) in btrfs_destroy_ordered_extents() argument
4566 spin_lock(&root->ordered_extent_lock); in btrfs_destroy_ordered_extents()
4571 list_for_each_entry(ordered, &root->ordered_extents, in btrfs_destroy_ordered_extents()
4574 spin_unlock(&root->ordered_extent_lock); in btrfs_destroy_ordered_extents()
4579 struct btrfs_root *root; in btrfs_destroy_all_ordered_extents() local
4585 root = list_first_entry(&splice, struct btrfs_root, in btrfs_destroy_all_ordered_extents()
4587 list_move_tail(&root->ordered_root, in btrfs_destroy_all_ordered_extents()
4591 btrfs_destroy_ordered_extents(root); in btrfs_destroy_all_ordered_extents()
4607 static void btrfs_destroy_delalloc_inodes(struct btrfs_root *root) in btrfs_destroy_delalloc_inodes() argument
4612 spin_lock(&root->delalloc_lock); in btrfs_destroy_delalloc_inodes()
4613 list_splice_init(&root->delalloc_inodes, &splice); in btrfs_destroy_delalloc_inodes()
4620 spin_unlock(&root->delalloc_lock); in btrfs_destroy_delalloc_inodes()
4635 spin_lock(&root->delalloc_lock); in btrfs_destroy_delalloc_inodes()
4637 spin_unlock(&root->delalloc_lock); in btrfs_destroy_delalloc_inodes()
4642 struct btrfs_root *root; in btrfs_destroy_all_delalloc_inodes() local
4648 root = list_first_entry(&splice, struct btrfs_root, in btrfs_destroy_all_delalloc_inodes()
4650 root = btrfs_grab_root(root); in btrfs_destroy_all_delalloc_inodes()
4651 BUG_ON(!root); in btrfs_destroy_all_delalloc_inodes()
4654 btrfs_destroy_delalloc_inodes(root); in btrfs_destroy_all_delalloc_inodes()
4655 btrfs_put_root(root); in btrfs_destroy_all_delalloc_inodes()
4801 struct btrfs_root *root = gang[i]; in btrfs_free_all_qgroup_pertrans() local
4803 btrfs_qgroup_free_meta_all_pertrans(root); in btrfs_free_all_qgroup_pertrans()
4805 (unsigned long)btrfs_root_id(root), in btrfs_free_all_qgroup_pertrans()
4896 int btrfs_init_root_free_objectid(struct btrfs_root *root) in btrfs_init_root_free_objectid() argument
4912 ret = btrfs_search_slot(NULL, root, &search_key, path, 0, 0); in btrfs_init_root_free_objectid()
4917 * Key with offset -1 found, there would have to exist a root in btrfs_init_root_free_objectid()
4926 root->free_objectid = max_t(u64, found_key.objectid + 1, in btrfs_init_root_free_objectid()
4929 root->free_objectid = BTRFS_FIRST_FREE_OBJECTID; in btrfs_init_root_free_objectid()
4935 int btrfs_get_free_objectid(struct btrfs_root *root, u64 *objectid) in btrfs_get_free_objectid() argument
4938 mutex_lock(&root->objectid_mutex); in btrfs_get_free_objectid()
4940 if (unlikely(root->free_objectid >= BTRFS_LAST_FREE_OBJECTID)) { in btrfs_get_free_objectid()
4941 btrfs_warn(root->fs_info, in btrfs_get_free_objectid()
4942 "the objectid of root %llu reaches its highest value", in btrfs_get_free_objectid()
4943 btrfs_root_id(root)); in btrfs_get_free_objectid()
4948 *objectid = root->free_objectid++; in btrfs_get_free_objectid()
4951 mutex_unlock(&root->objectid_mutex); in btrfs_get_free_objectid()