Re: [PATCH v2 2/3] btrfs: use aligned range for locking in reflink

Filipe Manana <[email protected]> Tue, 28 Jul 2026 10:46:12 +0100
Newsgroups org.kernel.vger.linux-btrfs
Message-ID <CAL3q7H6qr0Vy8G_MB1YOYo6c+sdU92cVN0mmctL=OojWeZFjgw@mail.gmail.com>
On Tue, Jul 28, 2026 at 10:44 AM Qu Wenruo <[email protected]> wrote:
>
> In btrfs_extent_same_range() and btrfs_clone_files(), the range passed
> into btrfs_lock_extent() is not aligned at its end, because we can
> reflink until the EOF, which may not be block aligned.
>
> Although this is not a big deal, for the sake of consistency, and to
> prepare for the upcoming stricter alignment check, pass an aligned range
> end to btrfs_lock_extent() and btrfs_unlock_extent().
>
> Signed-off-by: Qu Wenruo <[email protected]>

Reviewed-by: Filipe Manana <[email protected]>

Thanks.

> ---
>  fs/btrfs/reflink.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/btrfs/reflink.c b/fs/btrfs/reflink.c
> index ec6a760519d9..d2a4101912bd 100644
> --- a/fs/btrfs/reflink.c
> +++ b/fs/btrfs/reflink.c
> @@ -687,10 +687,10 @@ static void btrfs_double_mmap_unlock(struct btrfs_inode *inode1, struct btrfs_in
>  static int btrfs_extent_same_range(struct btrfs_inode *src, u64 loff, u64 len,
>                                    struct btrfs_inode *dst, u64 dst_loff)
>  {
> -       const u64 end = dst_loff + len - 1;
>         struct extent_state *cached_state = NULL;
>         struct btrfs_fs_info *fs_info = src->root->fs_info;
>         const u32 bs = fs_info->sectorsize;
> +       const u64 end = round_up(dst_loff + len, bs) - 1;
>         int ret;
>
>         /*
> @@ -799,7 +799,7 @@ static noinline int btrfs_clone_files(struct file *file, struct file *file_src,
>          * because we have already locked the inode's i_mmap_lock in exclusive
>          * mode.
>          */
> -       end = destoff + len - 1;
> +       end = round_up(destoff + len, bs) - 1;
>         btrfs_lock_extent(&inode->io_tree, destoff, end, &cached_state);
>         ret = btrfs_clone(src, inode, off, olen, len, destoff, false);
>         btrfs_unlock_extent(&inode->io_tree, destoff, end, &cached_state);
> --
> 2.54.0
>
>