Lines Matching refs:root
68 static void free_fs_root(struct btrfs_root *root);
70 static void btrfs_destroy_ordered_extents(struct btrfs_root *root);
73 static void btrfs_destroy_delalloc_inodes(struct btrfs_root *root);
547 struct btrfs_root *root = BTRFS_I(page->mapping->host)->root; in btree_readpage_end_io_hook() local
548 struct btrfs_fs_info *fs_info = root->fs_info; in btree_readpage_end_io_hook()
605 if (found_level == 0 && btrfs_check_leaf_full(root, eb)) { in btree_readpage_end_io_hook()
610 if (found_level > 0 && btrfs_check_node(root, eb)) in btree_readpage_end_io_hook()
818 struct btrfs_root *root; in btree_csum_one_bio() local
823 root = BTRFS_I(bvec->bv_page->mapping->host)->root; in btree_csum_one_bio()
824 ret = csum_dirty_buffer(root->fs_info, bvec->bv_page); in btree_csum_one_bio()
952 fs_info = BTRFS_I(mapping->host)->root->fs_info; in btree_writepages()
986 btrfs_warn(BTRFS_I(page->mapping->host)->root->fs_info, in btree_invalidatepage()
1151 static void __setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info, in __setup_root() argument
1155 root->node = NULL; in __setup_root()
1156 root->commit_root = NULL; in __setup_root()
1157 root->state = 0; in __setup_root()
1158 root->orphan_cleanup_state = 0; in __setup_root()
1160 root->objectid = objectid; in __setup_root()
1161 root->last_trans = 0; in __setup_root()
1162 root->highest_objectid = 0; in __setup_root()
1163 root->nr_delalloc_inodes = 0; in __setup_root()
1164 root->nr_ordered_extents = 0; in __setup_root()
1165 root->name = NULL; in __setup_root()
1166 root->inode_tree = RB_ROOT; in __setup_root()
1167 INIT_RADIX_TREE(&root->delayed_nodes_tree, GFP_ATOMIC); in __setup_root()
1168 root->block_rsv = NULL; in __setup_root()
1169 root->orphan_block_rsv = NULL; in __setup_root()
1171 INIT_LIST_HEAD(&root->dirty_list); in __setup_root()
1172 INIT_LIST_HEAD(&root->root_list); in __setup_root()
1173 INIT_LIST_HEAD(&root->delalloc_inodes); in __setup_root()
1174 INIT_LIST_HEAD(&root->delalloc_root); in __setup_root()
1175 INIT_LIST_HEAD(&root->ordered_extents); in __setup_root()
1176 INIT_LIST_HEAD(&root->ordered_root); in __setup_root()
1177 INIT_LIST_HEAD(&root->logged_list[0]); in __setup_root()
1178 INIT_LIST_HEAD(&root->logged_list[1]); in __setup_root()
1179 spin_lock_init(&root->orphan_lock); in __setup_root()
1180 spin_lock_init(&root->inode_lock); in __setup_root()
1181 spin_lock_init(&root->delalloc_lock); in __setup_root()
1182 spin_lock_init(&root->ordered_extent_lock); in __setup_root()
1183 spin_lock_init(&root->accounting_lock); in __setup_root()
1184 spin_lock_init(&root->log_extents_lock[0]); in __setup_root()
1185 spin_lock_init(&root->log_extents_lock[1]); in __setup_root()
1186 mutex_init(&root->objectid_mutex); in __setup_root()
1187 mutex_init(&root->log_mutex); in __setup_root()
1188 mutex_init(&root->ordered_extent_mutex); in __setup_root()
1189 mutex_init(&root->delalloc_mutex); in __setup_root()
1190 init_waitqueue_head(&root->log_writer_wait); in __setup_root()
1191 init_waitqueue_head(&root->log_commit_wait[0]); in __setup_root()
1192 init_waitqueue_head(&root->log_commit_wait[1]); in __setup_root()
1193 INIT_LIST_HEAD(&root->log_ctxs[0]); in __setup_root()
1194 INIT_LIST_HEAD(&root->log_ctxs[1]); in __setup_root()
1195 atomic_set(&root->log_commit[0], 0); in __setup_root()
1196 atomic_set(&root->log_commit[1], 0); in __setup_root()
1197 atomic_set(&root->log_writers, 0); in __setup_root()
1198 atomic_set(&root->log_batch, 0); in __setup_root()
1199 atomic_set(&root->orphan_inodes, 0); in __setup_root()
1200 refcount_set(&root->refs, 1); in __setup_root()
1201 atomic_set(&root->will_be_snapshotted, 0); in __setup_root()
1202 atomic64_set(&root->qgroup_meta_rsv, 0); in __setup_root()
1203 root->log_transid = 0; in __setup_root()
1204 root->log_transid_committed = -1; in __setup_root()
1205 root->last_log_commit = 0; in __setup_root()
1207 extent_io_tree_init(&root->dirty_log_pages, NULL); in __setup_root()
1209 memset(&root->root_key, 0, sizeof(root->root_key)); in __setup_root()
1210 memset(&root->root_item, 0, sizeof(root->root_item)); in __setup_root()
1211 memset(&root->defrag_progress, 0, sizeof(root->defrag_progress)); in __setup_root()
1213 root->defrag_trans_start = fs_info->generation; in __setup_root()
1215 root->defrag_trans_start = 0; in __setup_root()
1216 root->root_key.objectid = objectid; in __setup_root()
1217 root->anon_dev = 0; in __setup_root()
1219 spin_lock_init(&root->root_item_lock); in __setup_root()
1225 struct btrfs_root *root = kzalloc(sizeof(*root), flags); in btrfs_alloc_root() local
1226 if (root) in btrfs_alloc_root()
1227 root->fs_info = fs_info; in btrfs_alloc_root()
1228 return root; in btrfs_alloc_root()
1235 struct btrfs_root *root; in btrfs_alloc_dummy_root() local
1240 root = btrfs_alloc_root(fs_info, GFP_KERNEL); in btrfs_alloc_dummy_root()
1241 if (!root) in btrfs_alloc_dummy_root()
1245 __setup_root(root, fs_info, BTRFS_ROOT_TREE_OBJECTID); in btrfs_alloc_dummy_root()
1246 root->alloc_bytenr = 0; in btrfs_alloc_dummy_root()
1248 return root; in btrfs_alloc_dummy_root()
1258 struct btrfs_root *root; in btrfs_create_tree() local
1263 root = btrfs_alloc_root(fs_info, GFP_KERNEL); in btrfs_create_tree()
1264 if (!root) in btrfs_create_tree()
1267 __setup_root(root, fs_info, objectid); in btrfs_create_tree()
1268 root->root_key.objectid = objectid; in btrfs_create_tree()
1269 root->root_key.type = BTRFS_ROOT_ITEM_KEY; in btrfs_create_tree()
1270 root->root_key.offset = 0; in btrfs_create_tree()
1272 leaf = btrfs_alloc_tree_block(trans, root, 0, objectid, NULL, 0, 0, 0); in btrfs_create_tree()
1284 root->node = leaf; in btrfs_create_tree()
1290 root->commit_root = btrfs_root_node(root); in btrfs_create_tree()
1291 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_create_tree()
1293 root->root_item.flags = 0; in btrfs_create_tree()
1294 root->root_item.byte_limit = 0; in btrfs_create_tree()
1295 btrfs_set_root_bytenr(&root->root_item, leaf->start); in btrfs_create_tree()
1296 btrfs_set_root_generation(&root->root_item, trans->transid); in btrfs_create_tree()
1297 btrfs_set_root_level(&root->root_item, 0); in btrfs_create_tree()
1298 btrfs_set_root_refs(&root->root_item, 1); in btrfs_create_tree()
1299 btrfs_set_root_used(&root->root_item, leaf->len); in btrfs_create_tree()
1300 btrfs_set_root_last_snapshot(&root->root_item, 0); in btrfs_create_tree()
1301 btrfs_set_root_dirid(&root->root_item, 0); in btrfs_create_tree()
1303 memcpy(root->root_item.uuid, uuid.b, BTRFS_UUID_SIZE); in btrfs_create_tree()
1304 root->root_item.drop_level = 0; in btrfs_create_tree()
1309 ret = btrfs_insert_root(trans, tree_root, &key, &root->root_item); in btrfs_create_tree()
1315 return root; in btrfs_create_tree()
1320 free_extent_buffer(root->commit_root); in btrfs_create_tree()
1323 kfree(root); in btrfs_create_tree()
1331 struct btrfs_root *root; in alloc_log_tree() local
1334 root = btrfs_alloc_root(fs_info, GFP_NOFS); in alloc_log_tree()
1335 if (!root) in alloc_log_tree()
1338 __setup_root(root, fs_info, BTRFS_TREE_LOG_OBJECTID); in alloc_log_tree()
1340 root->root_key.objectid = BTRFS_TREE_LOG_OBJECTID; in alloc_log_tree()
1341 root->root_key.type = BTRFS_ROOT_ITEM_KEY; in alloc_log_tree()
1342 root->root_key.offset = BTRFS_TREE_LOG_OBJECTID; in alloc_log_tree()
1353 leaf = btrfs_alloc_tree_block(trans, root, 0, BTRFS_TREE_LOG_OBJECTID, in alloc_log_tree()
1356 kfree(root); in alloc_log_tree()
1365 root->node = leaf; in alloc_log_tree()
1367 write_extent_buffer_fsid(root->node, fs_info->fsid); in alloc_log_tree()
1368 btrfs_mark_buffer_dirty(root->node); in alloc_log_tree()
1369 btrfs_tree_unlock(root->node); in alloc_log_tree()
1370 return root; in alloc_log_tree()
1387 struct btrfs_root *root) in btrfs_add_log_tree() argument
1389 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_add_log_tree()
1398 log_root->root_key.offset = root->root_key.objectid; in btrfs_add_log_tree()
1410 WARN_ON(root->log_root); in btrfs_add_log_tree()
1411 root->log_root = log_root; in btrfs_add_log_tree()
1412 root->log_transid = 0; in btrfs_add_log_tree()
1413 root->log_transid_committed = -1; in btrfs_add_log_tree()
1414 root->last_log_commit = 0; in btrfs_add_log_tree()
1421 struct btrfs_root *root; in btrfs_read_tree_root() local
1431 root = btrfs_alloc_root(fs_info, GFP_NOFS); in btrfs_read_tree_root()
1432 if (!root) { in btrfs_read_tree_root()
1437 __setup_root(root, fs_info, key->objectid); in btrfs_read_tree_root()
1440 &root->root_item, &root->root_key); in btrfs_read_tree_root()
1447 generation = btrfs_root_generation(&root->root_item); in btrfs_read_tree_root()
1448 root->node = read_tree_block(fs_info, in btrfs_read_tree_root()
1449 btrfs_root_bytenr(&root->root_item), in btrfs_read_tree_root()
1451 if (IS_ERR(root->node)) { in btrfs_read_tree_root()
1452 ret = PTR_ERR(root->node); in btrfs_read_tree_root()
1454 } else if (!btrfs_buffer_uptodate(root->node, generation, 0)) { in btrfs_read_tree_root()
1456 free_extent_buffer(root->node); in btrfs_read_tree_root()
1459 root->commit_root = btrfs_root_node(root); in btrfs_read_tree_root()
1462 return root; in btrfs_read_tree_root()
1465 kfree(root); in btrfs_read_tree_root()
1467 root = ERR_PTR(ret); in btrfs_read_tree_root()
1474 struct btrfs_root *root; in btrfs_read_fs_root() local
1476 root = btrfs_read_tree_root(tree_root, location); in btrfs_read_fs_root()
1477 if (IS_ERR(root)) in btrfs_read_fs_root()
1478 return root; in btrfs_read_fs_root()
1480 if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID) { in btrfs_read_fs_root()
1481 set_bit(BTRFS_ROOT_REF_COWS, &root->state); in btrfs_read_fs_root()
1482 btrfs_check_and_init_root_item(&root->root_item); in btrfs_read_fs_root()
1485 return root; in btrfs_read_fs_root()
1488 int btrfs_init_fs_root(struct btrfs_root *root) in btrfs_init_fs_root() argument
1493 root->free_ino_ctl = kzalloc(sizeof(*root->free_ino_ctl), GFP_NOFS); in btrfs_init_fs_root()
1494 root->free_ino_pinned = kzalloc(sizeof(*root->free_ino_pinned), in btrfs_init_fs_root()
1496 if (!root->free_ino_pinned || !root->free_ino_ctl) { in btrfs_init_fs_root()
1506 root->subv_writers = writers; in btrfs_init_fs_root()
1508 btrfs_init_free_ino_ctl(root); in btrfs_init_fs_root()
1509 spin_lock_init(&root->ino_cache_lock); in btrfs_init_fs_root()
1510 init_waitqueue_head(&root->ino_cache_wait); in btrfs_init_fs_root()
1512 ret = get_anon_bdev(&root->anon_dev); in btrfs_init_fs_root()
1516 mutex_lock(&root->objectid_mutex); in btrfs_init_fs_root()
1517 ret = btrfs_find_highest_objectid(root, in btrfs_init_fs_root()
1518 &root->highest_objectid); in btrfs_init_fs_root()
1520 mutex_unlock(&root->objectid_mutex); in btrfs_init_fs_root()
1524 ASSERT(root->highest_objectid <= BTRFS_LAST_FREE_OBJECTID); in btrfs_init_fs_root()
1526 mutex_unlock(&root->objectid_mutex); in btrfs_init_fs_root()
1537 struct btrfs_root *root; in btrfs_lookup_fs_root() local
1540 root = radix_tree_lookup(&fs_info->fs_roots_radix, in btrfs_lookup_fs_root()
1543 return root; in btrfs_lookup_fs_root()
1547 struct btrfs_root *root) in btrfs_insert_fs_root() argument
1557 (unsigned long)root->root_key.objectid, in btrfs_insert_fs_root()
1558 root); in btrfs_insert_fs_root()
1560 set_bit(BTRFS_ROOT_IN_RADIX, &root->state); in btrfs_insert_fs_root()
1571 struct btrfs_root *root; in btrfs_get_fs_root() local
1596 root = btrfs_lookup_fs_root(fs_info, location->objectid); in btrfs_get_fs_root()
1597 if (root) { in btrfs_get_fs_root()
1598 if (check_ref && btrfs_root_refs(&root->root_item) == 0) in btrfs_get_fs_root()
1600 return root; in btrfs_get_fs_root()
1603 root = btrfs_read_fs_root(fs_info->tree_root, location); in btrfs_get_fs_root()
1604 if (IS_ERR(root)) in btrfs_get_fs_root()
1605 return root; in btrfs_get_fs_root()
1607 if (check_ref && btrfs_root_refs(&root->root_item) == 0) { in btrfs_get_fs_root()
1612 ret = btrfs_init_fs_root(root); in btrfs_get_fs_root()
1630 set_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state); in btrfs_get_fs_root()
1632 ret = btrfs_insert_fs_root(fs_info, root); in btrfs_get_fs_root()
1635 free_fs_root(root); in btrfs_get_fs_root()
1640 return root; in btrfs_get_fs_root()
1642 free_fs_root(root); in btrfs_get_fs_root()
1688 struct btrfs_root *root = arg; in cleaner_kthread() local
1689 struct btrfs_fs_info *fs_info = root->fs_info; in cleaner_kthread()
1722 again = btrfs_clean_one_deleted_snapshot(root); in cleaner_kthread()
1755 struct btrfs_root *root = arg; in transaction_kthread() local
1756 struct btrfs_fs_info *fs_info = root->fs_info; in transaction_kthread()
1788 trans = btrfs_attach_transaction(root); in transaction_kthread()
2043 static void free_root_extent_buffers(struct btrfs_root *root) in free_root_extent_buffers() argument
2045 if (root) { in free_root_extent_buffers()
2046 free_extent_buffer(root->node); in free_root_extent_buffers()
2047 free_extent_buffer(root->commit_root); in free_root_extent_buffers()
2048 root->node = NULL; in free_root_extent_buffers()
2049 root->commit_root = NULL; in free_root_extent_buffers()
2147 BTRFS_I(inode)->root = fs_info->tree_root; in btrfs_init_btree_inode()
2321 struct btrfs_root *root; in btrfs_read_roots() local
2331 root = btrfs_read_tree_root(tree_root, &location); in btrfs_read_roots()
2332 if (IS_ERR(root)) in btrfs_read_roots()
2333 return PTR_ERR(root); in btrfs_read_roots()
2334 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2335 fs_info->extent_root = root; in btrfs_read_roots()
2338 root = btrfs_read_tree_root(tree_root, &location); in btrfs_read_roots()
2339 if (IS_ERR(root)) in btrfs_read_roots()
2340 return PTR_ERR(root); in btrfs_read_roots()
2341 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2342 fs_info->dev_root = root; in btrfs_read_roots()
2346 root = btrfs_read_tree_root(tree_root, &location); in btrfs_read_roots()
2347 if (IS_ERR(root)) in btrfs_read_roots()
2348 return PTR_ERR(root); in btrfs_read_roots()
2349 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2350 fs_info->csum_root = root; in btrfs_read_roots()
2353 root = btrfs_read_tree_root(tree_root, &location); in btrfs_read_roots()
2354 if (!IS_ERR(root)) { in btrfs_read_roots()
2355 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2357 fs_info->quota_root = root; in btrfs_read_roots()
2361 root = btrfs_read_tree_root(tree_root, &location); in btrfs_read_roots()
2362 if (IS_ERR(root)) { in btrfs_read_roots()
2363 ret = PTR_ERR(root); in btrfs_read_roots()
2367 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2368 fs_info->uuid_root = root; in btrfs_read_roots()
2373 root = btrfs_read_tree_root(tree_root, &location); in btrfs_read_roots()
2374 if (IS_ERR(root)) in btrfs_read_roots()
2375 return PTR_ERR(root); in btrfs_read_roots()
2376 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state); in btrfs_read_roots()
2377 fs_info->free_space_root = root; in btrfs_read_roots()
3562 struct btrfs_root *root) in btrfs_drop_and_free_fs_root() argument
3566 (unsigned long)root->root_key.objectid); in btrfs_drop_and_free_fs_root()
3569 if (btrfs_root_refs(&root->root_item) == 0) in btrfs_drop_and_free_fs_root()
3573 btrfs_free_log(NULL, root); in btrfs_drop_and_free_fs_root()
3574 if (root->reloc_root) { in btrfs_drop_and_free_fs_root()
3575 free_extent_buffer(root->reloc_root->node); in btrfs_drop_and_free_fs_root()
3576 free_extent_buffer(root->reloc_root->commit_root); in btrfs_drop_and_free_fs_root()
3577 btrfs_put_fs_root(root->reloc_root); in btrfs_drop_and_free_fs_root()
3578 root->reloc_root = NULL; in btrfs_drop_and_free_fs_root()
3582 if (root->free_ino_pinned) in btrfs_drop_and_free_fs_root()
3583 __btrfs_remove_free_space_cache(root->free_ino_pinned); in btrfs_drop_and_free_fs_root()
3584 if (root->free_ino_ctl) in btrfs_drop_and_free_fs_root()
3585 __btrfs_remove_free_space_cache(root->free_ino_ctl); in btrfs_drop_and_free_fs_root()
3586 free_fs_root(root); in btrfs_drop_and_free_fs_root()
3589 static void free_fs_root(struct btrfs_root *root) in free_fs_root() argument
3591 iput(root->ino_cache_inode); in free_fs_root()
3592 WARN_ON(!RB_EMPTY_ROOT(&root->inode_tree)); in free_fs_root()
3593 btrfs_free_block_rsv(root->fs_info, root->orphan_block_rsv); in free_fs_root()
3594 root->orphan_block_rsv = NULL; in free_fs_root()
3595 if (root->anon_dev) in free_fs_root()
3596 free_anon_bdev(root->anon_dev); in free_fs_root()
3597 if (root->subv_writers) in free_fs_root()
3598 btrfs_free_subvolume_writers(root->subv_writers); in free_fs_root()
3599 free_extent_buffer(root->node); in free_fs_root()
3600 free_extent_buffer(root->commit_root); in free_fs_root()
3601 kfree(root->free_ino_ctl); in free_fs_root()
3602 kfree(root->free_ino_pinned); in free_fs_root()
3603 kfree(root->name); in free_fs_root()
3604 btrfs_put_fs_root(root); in free_fs_root()
3607 void btrfs_free_fs_root(struct btrfs_root *root) in btrfs_free_fs_root() argument
3609 free_fs_root(root); in btrfs_free_fs_root()
3665 struct btrfs_root *root = fs_info->tree_root; in btrfs_commit_super() local
3677 trans = btrfs_join_transaction(root); in btrfs_commit_super()
3685 struct btrfs_root *root = fs_info->tree_root; in close_ctree() local
3793 __btrfs_free_block_rsv(root->orphan_block_rsv); in close_ctree()
3794 root->orphan_block_rsv = NULL; in close_ctree()
3826 struct btrfs_root *root; in btrfs_mark_buffer_dirty() local
3839 root = BTRFS_I(buf->pages[0]->mapping->host)->root; in btrfs_mark_buffer_dirty()
3840 fs_info = root->fs_info; in btrfs_mark_buffer_dirty()
3857 btrfs_check_leaf_relaxed(root, buf)) { in btrfs_mark_buffer_dirty()
3899 struct btrfs_root *root = BTRFS_I(buf->pages[0]->mapping->host)->root; in btrfs_read_buffer() local
3900 struct btrfs_fs_info *fs_info = root->fs_info; in btrfs_read_buffer()
4067 static void btrfs_destroy_ordered_extents(struct btrfs_root *root) in btrfs_destroy_ordered_extents() argument
4071 spin_lock(&root->ordered_extent_lock); in btrfs_destroy_ordered_extents()
4076 list_for_each_entry(ordered, &root->ordered_extents, in btrfs_destroy_ordered_extents()
4079 spin_unlock(&root->ordered_extent_lock); in btrfs_destroy_ordered_extents()
4084 struct btrfs_root *root; in btrfs_destroy_all_ordered_extents() local
4092 root = list_first_entry(&splice, struct btrfs_root, in btrfs_destroy_all_ordered_extents()
4094 list_move_tail(&root->ordered_root, in btrfs_destroy_all_ordered_extents()
4098 btrfs_destroy_ordered_extents(root); in btrfs_destroy_all_ordered_extents()
4184 static void btrfs_destroy_delalloc_inodes(struct btrfs_root *root) in btrfs_destroy_delalloc_inodes() argument
4191 spin_lock(&root->delalloc_lock); in btrfs_destroy_delalloc_inodes()
4192 list_splice_init(&root->delalloc_inodes, &splice); in btrfs_destroy_delalloc_inodes()
4198 __btrfs_del_delalloc_inode(root, btrfs_inode); in btrfs_destroy_delalloc_inodes()
4199 spin_unlock(&root->delalloc_lock); in btrfs_destroy_delalloc_inodes()
4210 spin_lock(&root->delalloc_lock); in btrfs_destroy_delalloc_inodes()
4212 spin_unlock(&root->delalloc_lock); in btrfs_destroy_delalloc_inodes()
4217 struct btrfs_root *root; in btrfs_destroy_all_delalloc_inodes() local
4225 root = list_first_entry(&splice, struct btrfs_root, in btrfs_destroy_all_delalloc_inodes()
4227 root = btrfs_grab_fs_root(root); in btrfs_destroy_all_delalloc_inodes()
4228 BUG_ON(!root); in btrfs_destroy_all_delalloc_inodes()
4231 btrfs_destroy_delalloc_inodes(root); in btrfs_destroy_all_delalloc_inodes()
4232 btrfs_put_fs_root(root); in btrfs_destroy_all_delalloc_inodes()