btrfs: remove no longer needed strict argument from can_nocow_extent()

All callers of can_nocow_extent() now pass a value of false for its
'strict' argument, making it redundant. So remove the argument from
can_nocow_extent() as well as can_nocow_file_extent(),
btrfs_cross_ref_exist() and check_committed_ref(), because this
argument was used just to influence the behavior of check_committed_ref().
Also remove the 'strict' field from struct can_nocow_file_extent_args,
which is now always false as well, as its value is taken from the
argument to can_nocow_extent().

Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Filipe Manana <fdmanana@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Filipe Manana 2024-12-09 14:54:51 +00:00 committed by David Sterba
parent 95418f4c79
commit 2a01169cbf
6 changed files with 13 additions and 22 deletions

View File

@ -526,7 +526,7 @@ bool btrfs_data_csum_ok(struct btrfs_bio *bbio, struct btrfs_device *dev,
u32 bio_offset, struct bio_vec *bv); u32 bio_offset, struct bio_vec *bv);
noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len, noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
struct btrfs_file_extent *file_extent, struct btrfs_file_extent *file_extent,
bool nowait, bool strict); bool nowait);
void btrfs_del_delalloc_inode(struct btrfs_inode *inode); void btrfs_del_delalloc_inode(struct btrfs_inode *inode);
struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry); struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry);

View File

@ -248,8 +248,7 @@ static int btrfs_get_blocks_direct_write(struct extent_map **map,
len = min(len, em->len - (start - em->start)); len = min(len, em->len - (start - em->start));
block_start = extent_map_block_start(em) + (start - em->start); block_start = extent_map_block_start(em) + (start - em->start);
if (can_nocow_extent(inode, start, &len, if (can_nocow_extent(inode, start, &len, &file_extent, false) == 1) {
&file_extent, false, false) == 1) {
bg = btrfs_inc_nocow_writers(fs_info, block_start); bg = btrfs_inc_nocow_writers(fs_info, block_start);
if (bg) if (bg)
can_nocow = true; can_nocow = true;

View File

@ -2296,8 +2296,7 @@ static noinline int check_delayed_ref(struct btrfs_root *root,
static noinline int check_committed_ref(struct btrfs_root *root, static noinline int check_committed_ref(struct btrfs_root *root,
struct btrfs_path *path, struct btrfs_path *path,
u64 objectid, u64 offset, u64 bytenr, u64 objectid, u64 offset, u64 bytenr)
bool strict)
{ {
struct btrfs_fs_info *fs_info = root->fs_info; struct btrfs_fs_info *fs_info = root->fs_info;
struct btrfs_root *extent_root = btrfs_extent_root(fs_info, bytenr); struct btrfs_root *extent_root = btrfs_extent_root(fs_info, bytenr);
@ -2361,11 +2360,10 @@ static noinline int check_committed_ref(struct btrfs_root *root,
/* /*
* If extent created before last snapshot => it's shared unless the * If extent created before last snapshot => it's shared unless the
* snapshot has been deleted. Use the heuristic if strict is false. * snapshot has been deleted.
*/ */
if (!strict && if (btrfs_extent_generation(leaf, ei) <=
(btrfs_extent_generation(leaf, ei) <= btrfs_root_last_snapshot(&root->root_item))
btrfs_root_last_snapshot(&root->root_item)))
goto out; goto out;
/* If this extent has SHARED_DATA_REF then it's shared */ /* If this extent has SHARED_DATA_REF then it's shared */
@ -2387,13 +2385,12 @@ out:
} }
int btrfs_cross_ref_exist(struct btrfs_root *root, u64 objectid, u64 offset, int btrfs_cross_ref_exist(struct btrfs_root *root, u64 objectid, u64 offset,
u64 bytenr, bool strict, struct btrfs_path *path) u64 bytenr, struct btrfs_path *path)
{ {
int ret; int ret;
do { do {
ret = check_committed_ref(root, path, objectid, ret = check_committed_ref(root, path, objectid, offset, bytenr);
offset, bytenr, strict);
if (ret && ret != -ENOENT) if (ret && ret != -ENOENT)
goto out; goto out;

View File

@ -117,7 +117,7 @@ int btrfs_pin_extent_for_log_replay(struct btrfs_trans_handle *trans,
const struct extent_buffer *eb); const struct extent_buffer *eb);
int btrfs_exclude_logged_extents(struct extent_buffer *eb); int btrfs_exclude_logged_extents(struct extent_buffer *eb);
int btrfs_cross_ref_exist(struct btrfs_root *root, int btrfs_cross_ref_exist(struct btrfs_root *root,
u64 objectid, u64 offset, u64 bytenr, bool strict, u64 objectid, u64 offset, u64 bytenr,
struct btrfs_path *path); struct btrfs_path *path);
struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans, struct extent_buffer *btrfs_alloc_tree_block(struct btrfs_trans_handle *trans,
struct btrfs_root *root, struct btrfs_root *root,

View File

@ -1023,7 +1023,7 @@ int btrfs_check_nocow_lock(struct btrfs_inode *inode, loff_t pos,
&cached_state); &cached_state);
} }
ret = can_nocow_extent(&inode->vfs_inode, lockstart, &num_bytes, ret = can_nocow_extent(&inode->vfs_inode, lockstart, &num_bytes,
NULL, nowait, false); NULL, nowait);
if (ret <= 0) if (ret <= 0)
btrfs_drew_write_unlock(&root->snapshot_lock); btrfs_drew_write_unlock(&root->snapshot_lock);
else else

View File

@ -1837,7 +1837,6 @@ struct can_nocow_file_extent_args {
/* End file offset (inclusive) of the range we want to NOCOW. */ /* End file offset (inclusive) of the range we want to NOCOW. */
u64 end; u64 end;
bool writeback_path; bool writeback_path;
bool strict;
/* /*
* Free the path passed to can_nocow_file_extent() once it's not needed * Free the path passed to can_nocow_file_extent() once it's not needed
* anymore. * anymore.
@ -1892,8 +1891,7 @@ static int can_nocow_file_extent(struct btrfs_path *path,
* for its subvolume was created, then this implies the extent is shared, * for its subvolume was created, then this implies the extent is shared,
* hence we must COW. * hence we must COW.
*/ */
if (!args->strict && if (btrfs_file_extent_generation(leaf, fi) <=
btrfs_file_extent_generation(leaf, fi) <=
btrfs_root_last_snapshot(&root->root_item)) btrfs_root_last_snapshot(&root->root_item))
goto out; goto out;
@ -1924,7 +1922,7 @@ static int can_nocow_file_extent(struct btrfs_path *path,
ret = btrfs_cross_ref_exist(root, btrfs_ino(inode), ret = btrfs_cross_ref_exist(root, btrfs_ino(inode),
key->offset - args->file_extent.offset, key->offset - args->file_extent.offset,
args->file_extent.disk_bytenr, args->strict, path); args->file_extent.disk_bytenr, path);
WARN_ON_ONCE(ret > 0 && is_freespace_inode); WARN_ON_ONCE(ret > 0 && is_freespace_inode);
if (ret != 0) if (ret != 0)
goto out; goto out;
@ -7011,8 +7009,6 @@ static bool btrfs_extent_readonly(struct btrfs_fs_info *fs_info, u64 bytenr)
* @orig_start: (optional) Return the original file offset of the file extent * @orig_start: (optional) Return the original file offset of the file extent
* @orig_len: (optional) Return the original on-disk length of the file extent * @orig_len: (optional) Return the original on-disk length of the file extent
* @ram_bytes: (optional) Return the ram_bytes of the file extent * @ram_bytes: (optional) Return the ram_bytes of the file extent
* @strict: if true, omit optimizations that might force us into unnecessary
* cow. e.g., don't trust generation number.
* *
* Return: * Return:
* >0 and update @len if we can do nocow write * >0 and update @len if we can do nocow write
@ -7024,7 +7020,7 @@ static bool btrfs_extent_readonly(struct btrfs_fs_info *fs_info, u64 bytenr)
*/ */
noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len, noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
struct btrfs_file_extent *file_extent, struct btrfs_file_extent *file_extent,
bool nowait, bool strict) bool nowait)
{ {
struct btrfs_fs_info *fs_info = inode_to_fs_info(inode); struct btrfs_fs_info *fs_info = inode_to_fs_info(inode);
struct can_nocow_file_extent_args nocow_args = { 0 }; struct can_nocow_file_extent_args nocow_args = { 0 };
@ -7077,7 +7073,6 @@ noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
nocow_args.start = offset; nocow_args.start = offset;
nocow_args.end = offset + *len - 1; nocow_args.end = offset + *len - 1;
nocow_args.strict = strict;
nocow_args.free_path = true; nocow_args.free_path = true;
ret = can_nocow_file_extent(path, &key, BTRFS_I(inode), &nocow_args); ret = can_nocow_file_extent(path, &key, BTRFS_I(inode), &nocow_args);