Commit 37f00a6d authored by Johannes Thumshirn's avatar Johannes Thumshirn Committed by David Sterba

btrfs: introduce btrfs_is_data_reloc_root

There are several places in our codebase where we check if a root is the
root of the data reloc tree and subsequent patches will introduce more.

Factor out the check into a small helper function instead of open coding
it multiple times.
Reviewed-by: default avatarNaohiro Aota <naohiro.aota@wdc.com>
Signed-off-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 38d5e541
...@@ -3846,6 +3846,11 @@ static inline bool btrfs_is_zoned(const struct btrfs_fs_info *fs_info) ...@@ -3846,6 +3846,11 @@ static inline bool btrfs_is_zoned(const struct btrfs_fs_info *fs_info)
return fs_info->zoned != 0; return fs_info->zoned != 0;
} }
static inline bool btrfs_is_data_reloc_root(const struct btrfs_root *root)
{
return root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID;
}
/* /*
* We use page status Private2 to indicate there is an ordered extent with * We use page status Private2 to indicate there is an ordered extent with
* unfinished IO. * unfinished IO.
......
...@@ -1500,7 +1500,7 @@ static int btrfs_init_fs_root(struct btrfs_root *root, dev_t anon_dev) ...@@ -1500,7 +1500,7 @@ static int btrfs_init_fs_root(struct btrfs_root *root, dev_t anon_dev)
goto fail; goto fail;
if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID && if (root->root_key.objectid != BTRFS_TREE_LOG_OBJECTID &&
root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID) { !btrfs_is_data_reloc_root(root)) {
set_bit(BTRFS_ROOT_SHAREABLE, &root->state); set_bit(BTRFS_ROOT_SHAREABLE, &root->state);
btrfs_check_and_init_root_item(&root->root_item); btrfs_check_and_init_root_item(&root->root_item);
} }
......
...@@ -2376,7 +2376,7 @@ int btrfs_cross_ref_exist(struct btrfs_root *root, u64 objectid, u64 offset, ...@@ -2376,7 +2376,7 @@ int btrfs_cross_ref_exist(struct btrfs_root *root, u64 objectid, u64 offset,
out: out:
btrfs_free_path(path); btrfs_free_path(path);
if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID) if (btrfs_is_data_reloc_root(root))
WARN_ON(ret > 0); WARN_ON(ret > 0);
return ret; return ret;
} }
......
...@@ -1150,7 +1150,7 @@ static noinline int cow_file_range(struct btrfs_inode *inode, ...@@ -1150,7 +1150,7 @@ static noinline int cow_file_range(struct btrfs_inode *inode,
* fails during the stage where it updates the bytenr of file extent * fails during the stage where it updates the bytenr of file extent
* items. * items.
*/ */
if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID) if (btrfs_is_data_reloc_root(root))
min_alloc_size = num_bytes; min_alloc_size = num_bytes;
else else
min_alloc_size = fs_info->sectorsize; min_alloc_size = fs_info->sectorsize;
...@@ -1186,8 +1186,7 @@ static noinline int cow_file_range(struct btrfs_inode *inode, ...@@ -1186,8 +1186,7 @@ static noinline int cow_file_range(struct btrfs_inode *inode,
if (ret) if (ret)
goto out_drop_extent_cache; goto out_drop_extent_cache;
if (root->root_key.objectid == if (btrfs_is_data_reloc_root(root)) {
BTRFS_DATA_RELOC_TREE_OBJECTID) {
ret = btrfs_reloc_clone_csums(inode, start, ret = btrfs_reloc_clone_csums(inode, start,
cur_alloc_size); cur_alloc_size);
/* /*
...@@ -1503,8 +1502,7 @@ static int fallback_to_cow(struct btrfs_inode *inode, struct page *locked_page, ...@@ -1503,8 +1502,7 @@ static int fallback_to_cow(struct btrfs_inode *inode, struct page *locked_page,
int *page_started, unsigned long *nr_written) int *page_started, unsigned long *nr_written)
{ {
const bool is_space_ino = btrfs_is_free_space_inode(inode); const bool is_space_ino = btrfs_is_free_space_inode(inode);
const bool is_reloc_ino = (inode->root->root_key.objectid == const bool is_reloc_ino = btrfs_is_data_reloc_root(inode->root);
BTRFS_DATA_RELOC_TREE_OBJECTID);
const u64 range_bytes = end + 1 - start; const u64 range_bytes = end + 1 - start;
struct extent_io_tree *io_tree = &inode->io_tree; struct extent_io_tree *io_tree = &inode->io_tree;
u64 range_start = start; u64 range_start = start;
...@@ -1866,8 +1864,7 @@ static noinline int run_delalloc_nocow(struct btrfs_inode *inode, ...@@ -1866,8 +1864,7 @@ static noinline int run_delalloc_nocow(struct btrfs_inode *inode,
btrfs_dec_nocow_writers(fs_info, disk_bytenr); btrfs_dec_nocow_writers(fs_info, disk_bytenr);
nocow = false; nocow = false;
if (root->root_key.objectid == if (btrfs_is_data_reloc_root(root))
BTRFS_DATA_RELOC_TREE_OBJECTID)
/* /*
* Error handled later, as we must prevent * Error handled later, as we must prevent
* extent_clear_unlock_delalloc() in error handler * extent_clear_unlock_delalloc() in error handler
...@@ -2206,7 +2203,7 @@ void btrfs_clear_delalloc_extent(struct inode *vfs_inode, ...@@ -2206,7 +2203,7 @@ void btrfs_clear_delalloc_extent(struct inode *vfs_inode,
if (btrfs_is_testing(fs_info)) if (btrfs_is_testing(fs_info))
return; return;
if (root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID && if (!btrfs_is_data_reloc_root(root) &&
do_list && !(state->state & EXTENT_NORESERVE) && do_list && !(state->state & EXTENT_NORESERVE) &&
(*bits & EXTENT_CLEAR_DATA_RESV)) (*bits & EXTENT_CLEAR_DATA_RESV))
btrfs_free_reserved_data_space_noquota(fs_info, len); btrfs_free_reserved_data_space_noquota(fs_info, len);
...@@ -2531,7 +2528,7 @@ blk_status_t btrfs_submit_data_bio(struct inode *inode, struct bio *bio, ...@@ -2531,7 +2528,7 @@ blk_status_t btrfs_submit_data_bio(struct inode *inode, struct bio *bio,
goto mapit; goto mapit;
} else if (async && !skip_sum) { } else if (async && !skip_sum) {
/* csum items have already been cloned */ /* csum items have already been cloned */
if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID) if (btrfs_is_data_reloc_root(root))
goto mapit; goto mapit;
/* we're doing a write, do the async checksumming */ /* we're doing a write, do the async checksumming */
ret = btrfs_wq_submit_bio(inode, bio, mirror_num, bio_flags, ret = btrfs_wq_submit_bio(inode, bio, mirror_num, bio_flags,
...@@ -3307,7 +3304,7 @@ unsigned int btrfs_verify_data_csum(struct btrfs_io_bio *io_bio, u32 bio_offset, ...@@ -3307,7 +3304,7 @@ unsigned int btrfs_verify_data_csum(struct btrfs_io_bio *io_bio, u32 bio_offset,
u64 file_offset = pg_off + page_offset(page); u64 file_offset = pg_off + page_offset(page);
int ret; int ret;
if (root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID && if (btrfs_is_data_reloc_root(root) &&
test_range_bit(io_tree, file_offset, test_range_bit(io_tree, file_offset,
file_offset + sectorsize - 1, file_offset + sectorsize - 1,
EXTENT_NODATASUM, 1, NULL)) { EXTENT_NODATASUM, 1, NULL)) {
...@@ -4008,7 +4005,7 @@ noinline int btrfs_update_inode(struct btrfs_trans_handle *trans, ...@@ -4008,7 +4005,7 @@ noinline int btrfs_update_inode(struct btrfs_trans_handle *trans,
* without delay * without delay
*/ */
if (!btrfs_is_free_space_inode(inode) if (!btrfs_is_free_space_inode(inode)
&& root->root_key.objectid != BTRFS_DATA_RELOC_TREE_OBJECTID && !btrfs_is_data_reloc_root(root)
&& !test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) { && !test_bit(BTRFS_FS_LOG_RECOVERING, &fs_info->flags)) {
btrfs_update_root_times(trans, root); btrfs_update_root_times(trans, root);
......
...@@ -4390,8 +4390,7 @@ int btrfs_reloc_cow_block(struct btrfs_trans_handle *trans, ...@@ -4390,8 +4390,7 @@ int btrfs_reloc_cow_block(struct btrfs_trans_handle *trans,
if (!rc) if (!rc)
return 0; return 0;
BUG_ON(rc->stage == UPDATE_DATA_PTRS && BUG_ON(rc->stage == UPDATE_DATA_PTRS && btrfs_is_data_reloc_root(root));
root->root_key.objectid == BTRFS_DATA_RELOC_TREE_OBJECTID);
level = btrfs_header_level(buf); level = btrfs_header_level(buf);
if (btrfs_header_generation(buf) <= if (btrfs_header_generation(buf) <=
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment