Lines Matching refs:root

60 	struct btrfs_root *root;  member
289 static struct rb_node *tree_insert(struct rb_root *root, u64 bytenr, in tree_insert() argument
292 struct rb_node **p = &root->rb_node; in tree_insert()
309 rb_insert_color(node, root); in tree_insert()
313 static struct rb_node *tree_search(struct rb_root *root, u64 bytenr) in tree_search() argument
315 struct rb_node *n = root->rb_node; in tree_search()
337 if (bnode->root) in backref_tree_panic()
338 fs_info = bnode->root->fs_info; in backref_tree_panic()
527 static int should_ignore_root(struct btrfs_root *root) in should_ignore_root() argument
531 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state)) in should_ignore_root()
534 reloc_root = root->reloc_root; in should_ignore_root()
539 root->fs_info->running_transaction->transid - 1) in should_ignore_root()
557 struct btrfs_root *root = NULL; in find_reloc_root() local
563 root = (struct btrfs_root *)node->data; in find_reloc_root()
566 return root; in find_reloc_root()
604 struct btrfs_root *root; in find_tree_root() local
610 root = read_fs_root(rc->extent_root->fs_info, root_objectid); in find_tree_root()
611 BUG_ON(IS_ERR(root)); in find_tree_root()
613 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state) && in find_tree_root()
614 generation != btrfs_root_generation(&root->root_item)) in find_tree_root()
617 return root; in find_tree_root()
687 struct btrfs_root *root; local
823 root = find_tree_root(rc, eb, ref0);
824 if (root && !should_ignore_root(root))
825 cur->root = root;
843 root = find_reloc_root(rc, cur->bytenr);
844 ASSERT(root);
845 cur->root = root;
885 root = read_fs_root(rc->extent_root->fs_info, key.offset);
886 if (IS_ERR(root)) {
887 err = PTR_ERR(root);
891 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state))
894 if (btrfs_root_level(&root->root_item) == cur->level) {
896 ASSERT(btrfs_root_bytenr(&root->root_item) ==
898 if (should_ignore_root(root))
901 cur->root = root;
914 ret = btrfs_search_slot(NULL, root, node_key, path2, 0, 0);
931 ASSERT(btrfs_root_bytenr(&root->root_item) ==
933 if (should_ignore_root(root))
936 lower->root = root;
959 &root->state))
966 if (btrfs_block_can_be_shared(root, eb))
1232 new_node->root = dest;
1275 static int __must_check __add_reloc_root(struct btrfs_root *root) argument
1279 struct reloc_control *rc = root->fs_info->reloc_ctl;
1285 node->bytenr = root->node->start;
1286 node->data = root;
1293 btrfs_panic(root->fs_info, -EEXIST, "Duplicate root found "
1300 list_add_tail(&root->root_list, &rc->reloc_roots);
1308 static void __del_reloc_root(struct btrfs_root *root) argument
1312 struct reloc_control *rc = root->fs_info->reloc_ctl;
1316 root->node->start);
1325 BUG_ON((struct btrfs_root *)node->data != root);
1327 spin_lock(&root->fs_info->trans_lock);
1328 list_del_init(&root->root_list);
1329 spin_unlock(&root->fs_info->trans_lock);
1337 static int __update_reloc_root(struct btrfs_root *root, u64 new_bytenr) argument
1341 struct reloc_control *rc = root->fs_info->reloc_ctl;
1345 root->node->start);
1354 BUG_ON((struct btrfs_root *)node->data != root);
1367 struct btrfs_root *root, u64 objectid) argument
1383 if (root->root_key.objectid == objectid) {
1385 ret = btrfs_copy_root(trans, root, root->commit_root, &eb,
1389 last_snap = btrfs_root_last_snapshot(&root->root_item);
1390 btrfs_set_root_last_snapshot(&root->root_item,
1400 ret = btrfs_copy_root(trans, root, root->node, &eb,
1405 memcpy(root_item, &root->root_item, sizeof(*root_item));
1410 if (root->root_key.objectid == objectid) {
1426 ret = btrfs_insert_root(trans, root->fs_info->tree_root,
1431 reloc_root = btrfs_read_fs_root(root->fs_info->tree_root, &root_key);
1442 struct btrfs_root *root) argument
1445 struct reloc_control *rc = root->fs_info->reloc_ctl;
1450 if (root->reloc_root) {
1451 reloc_root = root->reloc_root;
1457 root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)
1465 reloc_root = create_reloc_root(trans, root, root->root_key.objectid);
1471 root->reloc_root = reloc_root;
1479 struct btrfs_root *root) argument
1485 if (!root->reloc_root)
1488 reloc_root = root->reloc_root;
1491 if (root->fs_info->reloc_ctl->merge_reloc_tree &&
1493 root->reloc_root = NULL;
1503 ret = btrfs_update_root(trans, root->fs_info->tree_root,
1515 static struct inode *find_next_inode(struct btrfs_root *root, u64 objectid) argument
1522 spin_lock(&root->inode_lock);
1524 node = root->inode_tree.rb_node;
1551 spin_unlock(&root->inode_lock);
1556 if (cond_resched_lock(&root->inode_lock))
1561 spin_unlock(&root->inode_lock);
1580 struct btrfs_root *root = BTRFS_I(reloc_inode)->root; local
1591 ret = btrfs_lookup_file_extent(NULL, root, path, btrfs_ino(reloc_inode),
1628 struct btrfs_root *root, argument
1649 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)
1675 if (root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID) {
1677 inode = find_next_inode(root, key.objectid);
1681 inode = find_next_inode(root, key.objectid);
1687 root->sectorsize));
1688 WARN_ON(!IS_ALIGNED(end, root->sectorsize));
1716 ret = btrfs_inc_extent_ref(trans, root, new_bytenr,
1721 btrfs_abort_transaction(trans, root, ret);
1725 ret = btrfs_free_extent(trans, root, bytenr, num_bytes,
1729 btrfs_abort_transaction(trans, root, ret);
1934 int walk_up_reloc_tree(struct btrfs_root *root, struct btrfs_path *path, argument
1942 last_snapshot = btrfs_root_last_snapshot(&root->root_item);
1971 int walk_down_reloc_tree(struct btrfs_root *root, struct btrfs_path *path, argument
1981 last_snapshot = btrfs_root_last_snapshot(&root->root_item);
2004 eb = read_tree_block(root, bytenr, ptr_gen);
2020 static int invalidate_extent_cache(struct btrfs_root *root, argument
2037 inode = find_next_inode(root, objectid);
2058 WARN_ON(!IS_ALIGNED(start, root->sectorsize));
2073 WARN_ON(!IS_ALIGNED(end, root->sectorsize));
2111 struct btrfs_root *root) argument
2133 reloc_root = root->reloc_root;
2161 min_reserved = root->nodesize * (BTRFS_MAX_LEVEL - 1) * 2;
2165 ret = btrfs_block_rsv_refill(root, rc->block_rsv, min_reserved,
2171 trans = btrfs_start_transaction(root, 0);
2194 ret = replace_path(trans, root, reloc_root, path,
2222 btrfs_end_transaction_throttle(trans, root);
2225 btrfs_btree_balance_dirty(root);
2228 invalidate_extent_cache(root, &key, &next_key);
2235 leaf = btrfs_lock_root_node(root);
2236 ret = btrfs_cow_block(trans, root, leaf, NULL, 0, &leaf);
2249 btrfs_update_reloc_root(trans, root);
2253 btrfs_end_transaction_throttle(trans, root);
2255 btrfs_btree_balance_dirty(root);
2258 invalidate_extent_cache(root, &key, &next_key);
2266 struct btrfs_root *root = rc->extent_root; local
2273 mutex_lock(&root->fs_info->reloc_mutex);
2274 rc->merging_rsv_size += root->nodesize * (BTRFS_MAX_LEVEL - 1) * 2;
2276 mutex_unlock(&root->fs_info->reloc_mutex);
2281 ret = btrfs_block_rsv_add(root, rc->block_rsv, num_bytes,
2311 root = read_fs_root(reloc_root->fs_info,
2313 BUG_ON(IS_ERR(root));
2314 BUG_ON(root->reloc_root != reloc_root);
2322 btrfs_update_reloc_root(trans, root);
2351 struct btrfs_root *root; local
2360 root = rc->extent_root;
2368 mutex_lock(&root->fs_info->reloc_mutex);
2370 mutex_unlock(&root->fs_info->reloc_mutex);
2378 root = read_fs_root(reloc_root->fs_info,
2380 BUG_ON(IS_ERR(root));
2381 BUG_ON(root->reloc_root != reloc_root);
2383 ret = merge_reloc_root(rc, root);
2417 btrfs_std_error(root->fs_info, ret);
2422 mutex_lock(&root->fs_info->reloc_mutex);
2424 mutex_unlock(&root->fs_info->reloc_mutex);
2446 struct btrfs_root *root; local
2451 root = read_fs_root(reloc_root->fs_info, reloc_root->root_key.offset);
2452 BUG_ON(IS_ERR(root));
2453 BUG_ON(root->reloc_root != reloc_root);
2455 return btrfs_record_root_in_trans(trans, root);
2465 struct btrfs_root *root; local
2472 root = next->root;
2473 BUG_ON(!root);
2474 BUG_ON(!test_bit(BTRFS_ROOT_REF_COWS, &root->state));
2476 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) {
2477 record_reloc_root_in_trans(trans, root);
2481 btrfs_record_root_in_trans(trans, root);
2482 root = root->reloc_root;
2484 if (next->new_bytenr != root->node->start) {
2487 next->new_bytenr = root->node->start;
2488 next->root = root;
2496 root = NULL;
2501 if (!root)
2512 return root;
2526 struct btrfs_root *root; local
2535 root = next->root;
2536 BUG_ON(!root);
2539 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state))
2540 return root;
2542 if (root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID)
2543 fs_root = root;
2595 struct btrfs_root *root = rc->extent_root; local
2604 ret = btrfs_block_rsv_refill(root, rc->block_rsv, num_bytes,
2644 struct btrfs_root *root; local
2661 root = select_reloc_root(trans, rc, upper, edges);
2662 BUG_ON(!root);
2677 ret = btrfs_search_slot(trans, root, key, path, 0, 1);
2710 blocksize = root->nodesize;
2712 eb = read_tree_block(root, bytenr, generation);
2722 ret = btrfs_cow_block(trans, root, eb, upper->eb,
2738 ret = btrfs_inc_extent_ref(trans, root,
2745 ret = btrfs_drop_subtree(trans, root, eb, upper->eb);
2899 struct btrfs_root *root; local
2906 root = select_one_root(trans, node);
2907 if (root == ERR_PTR(-ENOENT)) {
2912 if (!root || test_bit(BTRFS_ROOT_REF_COWS, &root->state)) {
2918 if (root) {
2919 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state)) {
2922 btrfs_record_root_in_trans(trans, root);
2923 root = root->reloc_root;
2924 node->new_bytenr = root->node->start;
2925 node->root = root;
2929 ret = btrfs_search_slot(trans, root, key, path, 0, 1);
3062 struct btrfs_root *root = BTRFS_I(inode)->root; local
3075 em->bdev = root->fs_info->fs_devices->latest_bdev;
3191 btrfs_throttle(BTRFS_I(inode)->root);
3438 struct btrfs_root *root = fs_info->tree_root; local
3449 inode = btrfs_iget(fs_info->sb, &key, root, NULL);
3457 ret = btrfs_check_trunc_cache_free_space(root,
3462 trans = btrfs_join_transaction(root);
3468 ret = btrfs_truncate_free_space_cache(root, trans, block_group, inode);
3470 btrfs_end_transaction(trans, root);
3471 btrfs_btree_balance_dirty(root);
3489 struct btrfs_root *root; local
3526 root = read_fs_root(rc->extent_root->fs_info, ref_root);
3527 if (IS_ERR(root)) {
3528 err = PTR_ERR(root);
3541 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
3567 ret = btrfs_next_leaf(root, path);
4093 struct btrfs_root *root, u64 objectid) argument
4104 ret = btrfs_insert_empty_inode(trans, root, path, objectid);
4132 struct btrfs_root *root; local
4137 root = read_fs_root(fs_info, BTRFS_DATA_RELOC_TREE_OBJECTID);
4138 if (IS_ERR(root))
4139 return ERR_CAST(root);
4141 trans = btrfs_start_transaction(root, 6);
4145 err = btrfs_find_free_objectid(root, &objectid);
4149 err = __insert_orphan_inode(trans, root, objectid);
4155 inode = btrfs_iget(root->fs_info->sb, &key, root, NULL);
4161 btrfs_end_transaction(trans, root);
4162 btrfs_btree_balance_dirty(root);
4295 static noinline_for_stack int mark_garbage_root(struct btrfs_root *root) argument
4300 trans = btrfs_start_transaction(root->fs_info->tree_root, 0);
4304 memset(&root->root_item.drop_progress, 0,
4305 sizeof(root->root_item.drop_progress));
4306 root->root_item.drop_level = 0;
4307 btrfs_set_root_refs(&root->root_item, 0);
4308 ret = btrfs_update_root(trans, root->fs_info->tree_root,
4309 &root->root_key, &root->root_item);
4311 err = btrfs_end_transaction(trans, root->fs_info->tree_root);
4323 int btrfs_recover_relocation(struct btrfs_root *root) argument
4346 ret = btrfs_search_slot(NULL, root->fs_info->tree_root, &key,
4365 reloc_root = btrfs_read_fs_root(root, &key);
4374 fs_root = read_fs_root(root->fs_info,
4400 rc = alloc_reloc_control(root->fs_info);
4406 rc->extent_root = root->fs_info->extent_root;
4430 fs_root = read_fs_root(root->fs_info,
4465 fs_root = read_fs_root(root->fs_info,
4485 struct btrfs_root *root = BTRFS_I(inode)->root; local
4495 ret = btrfs_lookup_csums_range(root->fs_info->csum_root, disk_bytenr,
4527 struct btrfs_root *root, struct extent_buffer *buf, argument
4536 rc = root->fs_info->reloc_ctl;
4541 root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID);
4543 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) {
4544 if (buf == root->node)
4545 __update_reloc_root(root, cow->start);
4550 btrfs_root_last_snapshot(&root->root_item))
4553 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID &&
4580 ret = replace_file_extents(trans, rc, root, cow);
4592 struct btrfs_root *root; local
4595 root = pending->root;
4596 if (!root->reloc_root)
4599 rc = root->fs_info->reloc_ctl;
4603 root = root->reloc_root;
4604 BUG_ON(btrfs_root_refs(&root->root_item) == 0);
4625 struct btrfs_root *root = pending->root; local
4631 if (!root->reloc_root)
4634 rc = root->fs_info->reloc_ctl;
4646 reloc_root = create_reloc_root(trans, root->reloc_root,
4656 ret = clone_backref_node(trans, rc, root, reloc_root);