disk-io.c (2e608bd1dd51ee962bded788caee4aa812729e87) disk-io.c (29cbcf401793f4e2c871c846edc2191731df2c41)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2007 Oracle. All rights reserved.
4 */
5
6#include <linux/fs.h>
7#include <linux/blkdev.h>
8#include <linux/radix-tree.h>

--- 1543 unchanged lines hidden (view full) ---

1552}
1553
1554static struct btrfs_root *btrfs_get_global_root(struct btrfs_fs_info *fs_info,
1555 u64 objectid)
1556{
1557 if (objectid == BTRFS_ROOT_TREE_OBJECTID)
1558 return btrfs_grab_root(fs_info->tree_root);
1559 if (objectid == BTRFS_EXTENT_TREE_OBJECTID)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) 2007 Oracle. All rights reserved.
4 */
5
6#include <linux/fs.h>
7#include <linux/blkdev.h>
8#include <linux/radix-tree.h>

--- 1543 unchanged lines hidden (view full) ---

1552}
1553
1554static struct btrfs_root *btrfs_get_global_root(struct btrfs_fs_info *fs_info,
1555 u64 objectid)
1556{
1557 if (objectid == BTRFS_ROOT_TREE_OBJECTID)
1558 return btrfs_grab_root(fs_info->tree_root);
1559 if (objectid == BTRFS_EXTENT_TREE_OBJECTID)
1560 return btrfs_grab_root(fs_info->extent_root);
1560 return btrfs_grab_root(fs_info->_extent_root);
1561 if (objectid == BTRFS_CHUNK_TREE_OBJECTID)
1562 return btrfs_grab_root(fs_info->chunk_root);
1563 if (objectid == BTRFS_DEV_TREE_OBJECTID)
1564 return btrfs_grab_root(fs_info->dev_root);
1565 if (objectid == BTRFS_CSUM_TREE_OBJECTID)
1566 return btrfs_grab_root(fs_info->csum_root);
1567 if (objectid == BTRFS_QUOTA_TREE_OBJECTID)
1568 return btrfs_grab_root(fs_info->quota_root) ?

--- 56 unchanged lines hidden (view full) ---

1625 percpu_counter_destroy(&fs_info->delalloc_bytes);
1626 percpu_counter_destroy(&fs_info->ordered_bytes);
1627 percpu_counter_destroy(&fs_info->dev_replace.bio_counter);
1628 btrfs_free_csum_hash(fs_info);
1629 btrfs_free_stripe_hash_table(fs_info);
1630 btrfs_free_ref_cache(fs_info);
1631 kfree(fs_info->balance_ctl);
1632 kfree(fs_info->delayed_root);
1561 if (objectid == BTRFS_CHUNK_TREE_OBJECTID)
1562 return btrfs_grab_root(fs_info->chunk_root);
1563 if (objectid == BTRFS_DEV_TREE_OBJECTID)
1564 return btrfs_grab_root(fs_info->dev_root);
1565 if (objectid == BTRFS_CSUM_TREE_OBJECTID)
1566 return btrfs_grab_root(fs_info->csum_root);
1567 if (objectid == BTRFS_QUOTA_TREE_OBJECTID)
1568 return btrfs_grab_root(fs_info->quota_root) ?

--- 56 unchanged lines hidden (view full) ---

1625 percpu_counter_destroy(&fs_info->delalloc_bytes);
1626 percpu_counter_destroy(&fs_info->ordered_bytes);
1627 percpu_counter_destroy(&fs_info->dev_replace.bio_counter);
1628 btrfs_free_csum_hash(fs_info);
1629 btrfs_free_stripe_hash_table(fs_info);
1630 btrfs_free_ref_cache(fs_info);
1631 kfree(fs_info->balance_ctl);
1632 kfree(fs_info->delayed_root);
1633 btrfs_put_root(fs_info->extent_root);
1633 btrfs_put_root(fs_info->_extent_root);
1634 btrfs_put_root(fs_info->tree_root);
1635 btrfs_put_root(fs_info->chunk_root);
1636 btrfs_put_root(fs_info->dev_root);
1637 btrfs_put_root(fs_info->csum_root);
1638 btrfs_put_root(fs_info->quota_root);
1639 btrfs_put_root(fs_info->uuid_root);
1640 btrfs_put_root(fs_info->free_space_root);
1641 btrfs_put_root(fs_info->fs_root);

--- 361 unchanged lines hidden (view full) ---

2003 * copy all the root pointers into the super backup array.
2004 * this will bump the backup pointer by one when it is
2005 * done
2006 */
2007static void backup_super_roots(struct btrfs_fs_info *info)
2008{
2009 const int next_backup = info->backup_root_index;
2010 struct btrfs_root_backup *root_backup;
1634 btrfs_put_root(fs_info->tree_root);
1635 btrfs_put_root(fs_info->chunk_root);
1636 btrfs_put_root(fs_info->dev_root);
1637 btrfs_put_root(fs_info->csum_root);
1638 btrfs_put_root(fs_info->quota_root);
1639 btrfs_put_root(fs_info->uuid_root);
1640 btrfs_put_root(fs_info->free_space_root);
1641 btrfs_put_root(fs_info->fs_root);

--- 361 unchanged lines hidden (view full) ---

2003 * copy all the root pointers into the super backup array.
2004 * this will bump the backup pointer by one when it is
2005 * done
2006 */
2007static void backup_super_roots(struct btrfs_fs_info *info)
2008{
2009 const int next_backup = info->backup_root_index;
2010 struct btrfs_root_backup *root_backup;
2011 struct btrfs_root *extent_root = btrfs_extent_root(info, 0);
2011
2012 root_backup = info->super_for_commit->super_roots + next_backup;
2013
2014 /*
2015 * make sure all of our padding and empty slots get zero filled
2016 * regardless of which ones we use today
2017 */
2018 memset(root_backup, 0, sizeof(*root_backup));

--- 8 unchanged lines hidden (view full) ---

2027 btrfs_header_level(info->tree_root->node));
2028
2029 btrfs_set_backup_chunk_root(root_backup, info->chunk_root->node->start);
2030 btrfs_set_backup_chunk_root_gen(root_backup,
2031 btrfs_header_generation(info->chunk_root->node));
2032 btrfs_set_backup_chunk_root_level(root_backup,
2033 btrfs_header_level(info->chunk_root->node));
2034
2012
2013 root_backup = info->super_for_commit->super_roots + next_backup;
2014
2015 /*
2016 * make sure all of our padding and empty slots get zero filled
2017 * regardless of which ones we use today
2018 */
2019 memset(root_backup, 0, sizeof(*root_backup));

--- 8 unchanged lines hidden (view full) ---

2028 btrfs_header_level(info->tree_root->node));
2029
2030 btrfs_set_backup_chunk_root(root_backup, info->chunk_root->node->start);
2031 btrfs_set_backup_chunk_root_gen(root_backup,
2032 btrfs_header_generation(info->chunk_root->node));
2033 btrfs_set_backup_chunk_root_level(root_backup,
2034 btrfs_header_level(info->chunk_root->node));
2035
2035 btrfs_set_backup_extent_root(root_backup, info->extent_root->node->start);
2036 btrfs_set_backup_extent_root(root_backup, extent_root->node->start);
2036 btrfs_set_backup_extent_root_gen(root_backup,
2037 btrfs_set_backup_extent_root_gen(root_backup,
2037 btrfs_header_generation(info->extent_root->node));
2038 btrfs_header_generation(extent_root->node));
2038 btrfs_set_backup_extent_root_level(root_backup,
2039 btrfs_set_backup_extent_root_level(root_backup,
2039 btrfs_header_level(info->extent_root->node));
2040 btrfs_header_level(extent_root->node));
2040
2041 /*
2042 * we might commit during log recovery, which happens before we set
2043 * the fs_root. Make sure it is valid before we fill it in.
2044 */
2045 if (info->fs_root && info->fs_root->node) {
2046 btrfs_set_backup_fs_root(root_backup,
2047 info->fs_root->node->start);

--- 113 unchanged lines hidden (view full) ---

2161}
2162
2163/* helper to cleanup tree roots */
2164static void free_root_pointers(struct btrfs_fs_info *info, bool free_chunk_root)
2165{
2166 free_root_extent_buffers(info->tree_root);
2167
2168 free_root_extent_buffers(info->dev_root);
2041
2042 /*
2043 * we might commit during log recovery, which happens before we set
2044 * the fs_root. Make sure it is valid before we fill it in.
2045 */
2046 if (info->fs_root && info->fs_root->node) {
2047 btrfs_set_backup_fs_root(root_backup,
2048 info->fs_root->node->start);

--- 113 unchanged lines hidden (view full) ---

2162}
2163
2164/* helper to cleanup tree roots */
2165static void free_root_pointers(struct btrfs_fs_info *info, bool free_chunk_root)
2166{
2167 free_root_extent_buffers(info->tree_root);
2168
2169 free_root_extent_buffers(info->dev_root);
2169 free_root_extent_buffers(info->extent_root);
2170 free_root_extent_buffers(info->_extent_root);
2170 free_root_extent_buffers(info->csum_root);
2171 free_root_extent_buffers(info->quota_root);
2172 free_root_extent_buffers(info->uuid_root);
2173 free_root_extent_buffers(info->fs_root);
2174 free_root_extent_buffers(info->data_reloc_root);
2175 if (free_chunk_root)
2176 free_root_extent_buffers(info->chunk_root);
2177 free_root_extent_buffers(info->free_space_root);

--- 273 unchanged lines hidden (view full) ---

2451 root = btrfs_read_tree_root(tree_root, &location);
2452 if (IS_ERR(root)) {
2453 if (!btrfs_test_opt(fs_info, IGNOREBADROOTS)) {
2454 ret = PTR_ERR(root);
2455 goto out;
2456 }
2457 } else {
2458 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state);
2171 free_root_extent_buffers(info->csum_root);
2172 free_root_extent_buffers(info->quota_root);
2173 free_root_extent_buffers(info->uuid_root);
2174 free_root_extent_buffers(info->fs_root);
2175 free_root_extent_buffers(info->data_reloc_root);
2176 if (free_chunk_root)
2177 free_root_extent_buffers(info->chunk_root);
2178 free_root_extent_buffers(info->free_space_root);

--- 273 unchanged lines hidden (view full) ---

2452 root = btrfs_read_tree_root(tree_root, &location);
2453 if (IS_ERR(root)) {
2454 if (!btrfs_test_opt(fs_info, IGNOREBADROOTS)) {
2455 ret = PTR_ERR(root);
2456 goto out;
2457 }
2458 } else {
2459 set_bit(BTRFS_ROOT_TRACK_DIRTY, &root->state);
2459 fs_info->extent_root = root;
2460 fs_info->_extent_root = root;
2460 }
2461
2462 location.objectid = BTRFS_DEV_TREE_OBJECTID;
2463 root = btrfs_read_tree_root(tree_root, &location);
2464 if (IS_ERR(root)) {
2465 if (!btrfs_test_opt(fs_info, IGNOREBADROOTS)) {
2466 ret = PTR_ERR(root);
2467 goto out;

--- 2593 unchanged lines hidden ---
2461 }
2462
2463 location.objectid = BTRFS_DEV_TREE_OBJECTID;
2464 root = btrfs_read_tree_root(tree_root, &location);
2465 if (IS_ERR(root)) {
2466 if (!btrfs_test_opt(fs_info, IGNOREBADROOTS)) {
2467 ret = PTR_ERR(root);
2468 goto out;

--- 2593 unchanged lines hidden ---