mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 21:51:40 +00:00
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: Naohiro Aota <naohiro.aota@wdc.com> Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
38d5e541dd
commit
37f00a6d2e
@ -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)
|
|||||||
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,
|
|||||||
|
|
||||||
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,
|
|||||||
* 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,
|
|||||||
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,
|
|||||||
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 @@ out_check:
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
* 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,
|
|||||||
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) <=
|
||||||
|
Loading…
Reference in New Issue
Block a user