mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2026-01-27 12:47:24 +01:00
btrfs: make the rule checking more readable for should_cow_block()
It's quite hard and unreadable the way the rule checks are organized in
should_cow_block(). We have a single if statement that returns 0 (false)
and it checks several conditions, with one them being a negated compound
condition which is particularly hard to reason immediately.
Improve on this by using multiple if statements, each checking a single
condition and returning immediately. Also change the return type from an
integer to a boolean, since all we need is to return true or false.
At least on x86_64 with Debian's gcc 14.2.0-19, this also reduces the
object code size by 64 bytes.
Before this change:
$ size fs/btrfs/btrfs.ko
text data bss dec hex filename
1913327 161567 15592 2090486 1fe5f6 fs/btrfs/btrfs.ko
After this change:
$ size fs/btrfs/btrfs.ko
text data bss dec hex filename
1913263 161567 15592 2090422 1fe5b6 fs/btrfs/btrfs.ko
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
b7ff7b0d76
commit
f07575bab6
|
|
@ -613,15 +613,12 @@ error_unlock_cow:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static inline int should_cow_block(const struct btrfs_trans_handle *trans,
|
||||
const struct btrfs_root *root,
|
||||
const struct extent_buffer *buf)
|
||||
static inline bool should_cow_block(const struct btrfs_trans_handle *trans,
|
||||
const struct btrfs_root *root,
|
||||
const struct extent_buffer *buf)
|
||||
{
|
||||
if (btrfs_is_testing(root->fs_info))
|
||||
return 0;
|
||||
|
||||
/* Ensure we can see the FORCE_COW bit */
|
||||
smp_mb__before_atomic();
|
||||
return false;
|
||||
|
||||
/*
|
||||
* We do not need to cow a block if
|
||||
|
|
@ -634,13 +631,25 @@ static inline int should_cow_block(const struct btrfs_trans_handle *trans,
|
|||
* after we've finished copying src root, we must COW the shared
|
||||
* block to ensure the metadata consistency.
|
||||
*/
|
||||
if (btrfs_header_generation(buf) == trans->transid &&
|
||||
!btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN) &&
|
||||
!(btrfs_root_id(root) != BTRFS_TREE_RELOC_OBJECTID &&
|
||||
btrfs_header_flag(buf, BTRFS_HEADER_FLAG_RELOC)) &&
|
||||
!test_bit(BTRFS_ROOT_FORCE_COW, &root->state))
|
||||
return 0;
|
||||
return 1;
|
||||
|
||||
if (btrfs_header_generation(buf) != trans->transid)
|
||||
return true;
|
||||
|
||||
if (btrfs_header_flag(buf, BTRFS_HEADER_FLAG_WRITTEN))
|
||||
return true;
|
||||
|
||||
/* Ensure we can see the FORCE_COW bit. */
|
||||
smp_mb__before_atomic();
|
||||
if (test_bit(BTRFS_ROOT_FORCE_COW, &root->state))
|
||||
return true;
|
||||
|
||||
if (btrfs_root_id(root) == BTRFS_TREE_RELOC_OBJECTID)
|
||||
return false;
|
||||
|
||||
if (btrfs_header_flag(buf, BTRFS_HEADER_FLAG_RELOC))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user