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);
2022 static int invalidate_extent_cache(struct btrfs_root *root, argument
2039 inode = find_next_inode(root, objectid);
2060 WARN_ON(!IS_ALIGNED(start, root->sectorsize));
2075 WARN_ON(!IS_ALIGNED(end, root->sectorsize));
2113 struct btrfs_root *root) argument
2135 reloc_root = root->reloc_root;
2163 min_reserved = root->nodesize * (BTRFS_MAX_LEVEL - 1) * 2;
2167 ret = btrfs_block_rsv_refill(root, rc->block_rsv, min_reserved,
2173 trans = btrfs_start_transaction(root, 0);
2196 ret = replace_path(trans, root, reloc_root, path,
2224 btrfs_end_transaction_throttle(trans, root);
2227 btrfs_btree_balance_dirty(root);
2230 invalidate_extent_cache(root, &key, &next_key);
2237 leaf = btrfs_lock_root_node(root);
2238 ret = btrfs_cow_block(trans, root, leaf, NULL, 0, &leaf);
2251 btrfs_update_reloc_root(trans, root);
2255 btrfs_end_transaction_throttle(trans, root);
2257 btrfs_btree_balance_dirty(root);
2260 invalidate_extent_cache(root, &key, &next_key);
2268 struct btrfs_root *root = rc->extent_root; local
2275 mutex_lock(&root->fs_info->reloc_mutex);
2276 rc->merging_rsv_size += root->nodesize * (BTRFS_MAX_LEVEL - 1) * 2;
2278 mutex_unlock(&root->fs_info->reloc_mutex);
2283 ret = btrfs_block_rsv_add(root, rc->block_rsv, num_bytes,
2313 root = read_fs_root(reloc_root->fs_info,
2315 BUG_ON(IS_ERR(root));
2316 BUG_ON(root->reloc_root != reloc_root);
2324 btrfs_update_reloc_root(trans, root);
2353 struct btrfs_root *root; local
2362 root = rc->extent_root;
2370 mutex_lock(&root->fs_info->reloc_mutex);
2372 mutex_unlock(&root->fs_info->reloc_mutex);
2380 root = read_fs_root(reloc_root->fs_info,
2382 BUG_ON(IS_ERR(root));
2383 BUG_ON(root->reloc_root != reloc_root);
2385 ret = merge_reloc_root(rc, root);
2419 btrfs_std_error(root->fs_info, ret, NULL);
2424 mutex_lock(&root->fs_info->reloc_mutex);
2426 mutex_unlock(&root->fs_info->reloc_mutex);
2448 struct btrfs_root *root; local
2453 root = read_fs_root(reloc_root->fs_info, reloc_root->root_key.offset);
2454 BUG_ON(IS_ERR(root));
2455 BUG_ON(root->reloc_root != reloc_root);
2457 return btrfs_record_root_in_trans(trans, root);
2467 struct btrfs_root *root; local
2474 root = next->root;
2475 BUG_ON(!root);
2476 BUG_ON(!test_bit(BTRFS_ROOT_REF_COWS, &root->state));
2478 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) {
2479 record_reloc_root_in_trans(trans, root);
2483 btrfs_record_root_in_trans(trans, root);
2484 root = root->reloc_root;
2486 if (next->new_bytenr != root->node->start) {
2489 next->new_bytenr = root->node->start;
2490 next->root = root;
2498 root = NULL;
2503 if (!root)
2514 return root;
2527 struct btrfs_root *root; local
2536 root = next->root;
2537 BUG_ON(!root);
2540 if (!test_bit(BTRFS_ROOT_REF_COWS, &root->state))
2541 return root;
2543 if (root->root_key.objectid != BTRFS_TREE_RELOC_OBJECTID)
2544 fs_root = root;
2596 struct btrfs_root *root = rc->extent_root; local
2605 ret = btrfs_block_rsv_refill(root, rc->block_rsv, num_bytes,
2645 struct btrfs_root *root; local
2662 root = select_reloc_root(trans, rc, upper, edges);
2663 BUG_ON(!root);
2678 ret = btrfs_search_slot(trans, root, key, path, 0, 1);
2711 blocksize = root->nodesize;
2713 eb = read_tree_block(root, bytenr, generation);
2726 ret = btrfs_cow_block(trans, root, eb, upper->eb,
2742 ret = btrfs_inc_extent_ref(trans, root,
2749 ret = btrfs_drop_subtree(trans, root, eb, upper->eb);
2905 struct btrfs_root *root; local
2912 root = select_one_root(node);
2913 if (root == ERR_PTR(-ENOENT)) {
2918 if (!root || test_bit(BTRFS_ROOT_REF_COWS, &root->state)) {
2924 if (root) {
2925 if (test_bit(BTRFS_ROOT_REF_COWS, &root->state)) {
2928 btrfs_record_root_in_trans(trans, root);
2929 root = root->reloc_root;
2930 node->new_bytenr = root->node->start;
2931 node->root = root;
2935 ret = btrfs_search_slot(trans, root, key, path, 0, 1);
3068 struct btrfs_root *root = BTRFS_I(inode)->root; local
3081 em->bdev = root->fs_info->fs_devices->latest_bdev;
3197 btrfs_throttle(BTRFS_I(inode)->root);
3444 struct btrfs_root *root = fs_info->tree_root; local
3455 inode = btrfs_iget(fs_info->sb, &key, root, NULL);
3463 ret = btrfs_check_trunc_cache_free_space(root,
3468 trans = btrfs_join_transaction(root);
3474 ret = btrfs_truncate_free_space_cache(root, trans, block_group, inode);
3476 btrfs_end_transaction(trans, root);
3477 btrfs_btree_balance_dirty(root);
3495 struct btrfs_root *root; local
3532 root = read_fs_root(rc->extent_root->fs_info, ref_root);
3533 if (IS_ERR(root)) {
3534 err = PTR_ERR(root);
3547 ret = btrfs_search_slot(NULL, root, &key, path, 0, 0);
3573 ret = btrfs_next_leaf(root, path);
4102 struct btrfs_root *root, u64 objectid) argument
4113 ret = btrfs_insert_empty_inode(trans, root, path, objectid);
4141 struct btrfs_root *root; local
4146 root = read_fs_root(fs_info, BTRFS_DATA_RELOC_TREE_OBJECTID);
4147 if (IS_ERR(root))
4148 return ERR_CAST(root);
4150 trans = btrfs_start_transaction(root, 6);
4154 err = btrfs_find_free_objectid(root, &objectid);
4158 err = __insert_orphan_inode(trans, root, objectid);
4164 inode = btrfs_iget(root->fs_info->sb, &key, root, NULL);
4170 btrfs_end_transaction(trans, root);
4171 btrfs_btree_balance_dirty(root);
4302 static noinline_for_stack int mark_garbage_root(struct btrfs_root *root) argument
4307 trans = btrfs_start_transaction(root->fs_info->tree_root, 0);
4311 memset(&root->root_item.drop_progress, 0,
4312 sizeof(root->root_item.drop_progress));
4313 root->root_item.drop_level = 0;
4314 btrfs_set_root_refs(&root->root_item, 0);
4315 ret = btrfs_update_root(trans, root->fs_info->tree_root,
4316 &root->root_key, &root->root_item);
4318 err = btrfs_end_transaction(trans, root->fs_info->tree_root);
4330 int btrfs_recover_relocation(struct btrfs_root *root) argument
4353 ret = btrfs_search_slot(NULL, root->fs_info->tree_root, &key,
4372 reloc_root = btrfs_read_fs_root(root, &key);
4381 fs_root = read_fs_root(root->fs_info,
4407 rc = alloc_reloc_control(root->fs_info);
4413 rc->extent_root = root->fs_info->extent_root;
4437 fs_root = read_fs_root(root->fs_info,
4472 fs_root = read_fs_root(root->fs_info,
4492 struct btrfs_root *root = BTRFS_I(inode)->root; local
4502 ret = btrfs_lookup_csums_range(root->fs_info->csum_root, disk_bytenr,
4534 struct btrfs_root *root, struct extent_buffer *buf, argument
4543 rc = root->fs_info->reloc_ctl;
4548 root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID);
4550 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID) {
4551 if (buf == root->node)
4552 __update_reloc_root(root, cow->start);
4557 btrfs_root_last_snapshot(&root->root_item))
4560 if (root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID &&
4587 ret = replace_file_extents(trans, rc, root, cow);
4598 struct btrfs_root *root; local
4601 root = pending->root;
4602 if (!root->reloc_root)
4605 rc = root->fs_info->reloc_ctl;
4609 root = root->reloc_root;
4610 BUG_ON(btrfs_root_refs(&root->root_item) == 0);
4631 struct btrfs_root *root = pending->root; local
4637 if (!root->reloc_root)
4640 rc = root->fs_info->reloc_ctl;
4652 reloc_root = create_reloc_root(trans, root->reloc_root,
4662 ret = clone_backref_node(trans, rc, root, reloc_root);