mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-16 21:35:07 +00:00
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:
parent
95418f4c79
commit
2a01169cbf
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user