Message ID | 43c7b46211cc26f0f47ccd8bca522d70e4e563b8.1712933006.git.fdmanana@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: some speedup for NOCOW write path and cleanups | expand |
在 2024/4/13 00:33, fdmanana@kernel.org 写道: > From: Filipe Manana <fdmanana@suse.com> > > The csum_exist_in_range() function is now too trivial and is only used in > one place, so open code it in its single caller. > > Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: Qu Wenruo <wqu@suse.com> Thanks, Qu > --- > fs/btrfs/inode.c | 19 +++++++------------ > 1 file changed, 7 insertions(+), 12 deletions(-) > > diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c > index 1d78e07d082b..f23511428e74 100644 > --- a/fs/btrfs/inode.c > +++ b/fs/btrfs/inode.c > @@ -1737,15 +1737,6 @@ static noinline int run_delalloc_cow(struct btrfs_inode *inode, > return 1; > } > > -static noinline int csum_exist_in_range(struct btrfs_fs_info *fs_info, > - u64 bytenr, u64 num_bytes, bool nowait) > -{ > - struct btrfs_root *csum_root = btrfs_csum_root(fs_info, bytenr); > - > - return btrfs_lookup_csums_list(csum_root, bytenr, bytenr + num_bytes - 1, > - NULL, nowait); > -} > - > static int fallback_to_cow(struct btrfs_inode *inode, struct page *locked_page, > const u64 start, const u64 end) > { > @@ -1860,6 +1851,7 @@ static int can_nocow_file_extent(struct btrfs_path *path, > struct extent_buffer *leaf = path->nodes[0]; > struct btrfs_root *root = inode->root; > struct btrfs_file_extent_item *fi; > + struct btrfs_root *csum_root; > u64 extent_end; > u8 extent_type; > int can_nocow = 0; > @@ -1920,7 +1912,7 @@ static int can_nocow_file_extent(struct btrfs_path *path, > if (args->free_path) { > /* > * We don't need the path anymore, plus through the > - * csum_exist_in_range() call below we will end up allocating > + * btrfs_lookup_csums_list() call below we will end up allocating > * another path. So free the path to avoid unnecessary extra > * memory usage. > */ > @@ -1941,8 +1933,11 @@ static int can_nocow_file_extent(struct btrfs_path *path, > * Force COW if csums exist in the range. This ensures that csums for a > * given extent are either valid or do not exist. > */ > - ret = csum_exist_in_range(root->fs_info, args->disk_bytenr, args->num_bytes, > - nowait); > + > + csum_root = btrfs_csum_root(root->fs_info, args->disk_bytenr); > + ret = btrfs_lookup_csums_list(csum_root, args->disk_bytenr, > + args->disk_bytenr + args->num_bytes - 1, > + NULL, nowait); > WARN_ON_ONCE(ret > 0 && is_freespace_inode); > if (ret != 0) > goto out;
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 1d78e07d082b..f23511428e74 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -1737,15 +1737,6 @@ static noinline int run_delalloc_cow(struct btrfs_inode *inode, return 1; } -static noinline int csum_exist_in_range(struct btrfs_fs_info *fs_info, - u64 bytenr, u64 num_bytes, bool nowait) -{ - struct btrfs_root *csum_root = btrfs_csum_root(fs_info, bytenr); - - return btrfs_lookup_csums_list(csum_root, bytenr, bytenr + num_bytes - 1, - NULL, nowait); -} - static int fallback_to_cow(struct btrfs_inode *inode, struct page *locked_page, const u64 start, const u64 end) { @@ -1860,6 +1851,7 @@ static int can_nocow_file_extent(struct btrfs_path *path, struct extent_buffer *leaf = path->nodes[0]; struct btrfs_root *root = inode->root; struct btrfs_file_extent_item *fi; + struct btrfs_root *csum_root; u64 extent_end; u8 extent_type; int can_nocow = 0; @@ -1920,7 +1912,7 @@ static int can_nocow_file_extent(struct btrfs_path *path, if (args->free_path) { /* * We don't need the path anymore, plus through the - * csum_exist_in_range() call below we will end up allocating + * btrfs_lookup_csums_list() call below we will end up allocating * another path. So free the path to avoid unnecessary extra * memory usage. */ @@ -1941,8 +1933,11 @@ static int can_nocow_file_extent(struct btrfs_path *path, * Force COW if csums exist in the range. This ensures that csums for a * given extent are either valid or do not exist. */ - ret = csum_exist_in_range(root->fs_info, args->disk_bytenr, args->num_bytes, - nowait); + + csum_root = btrfs_csum_root(root->fs_info, args->disk_bytenr); + ret = btrfs_lookup_csums_list(csum_root, args->disk_bytenr, + args->disk_bytenr + args->num_bytes - 1, + NULL, nowait); WARN_ON_ONCE(ret > 0 && is_freespace_inode); if (ret != 0) goto out;