Re: [PATCH v2] Btrfs: send, improve clone range

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Mar 29, 2019 at 06:03:27PM +0800, robbieko wrote:
> From: Robbie Ko <robbieko@xxxxxxxxxxxx>
> 
> Improve clone_range two use scenarios.
> 
> 1. Remove the limit of inode size when find clone inodes
> We can do partial clone, so there is no need to limit the
> size of the candidate inode.
> When clone a range, we clone the legal range only by bytenr,
> offset, len, inode size.
> 
> 2. In the scenarios of rewrite or clone_range, data_offset
> rarely matches exactly, so the chance of a clone is missed.
> 
> e.g.
>     1. Write a 1M file
>         dd if=/dev/zero of=1M bs=1M count=1
> 
>     2. Clone 1M file
>        cp --reflink 1M clone
> 
>     3. Rewrite 4k on the clone file
>        dd if=/dev/zero of=clone bs=4k count=1 conv=notrunc
> 
>     The disk layout is as follows:
>     item 16 key (257 EXTENT_DATA 0) itemoff 15353 itemsize 53
> 	extent data disk byte 1103101952 nr 1048576
> 	extent data offset 0 nr 1048576 ram 1048576
> 	extent compression(none)
>     ...
>     item 22 key (258 EXTENT_DATA 0) itemoff 14959 itemsize 53
> 	extent data disk byte 1104150528 nr 4096
> 	extent data offset 0 nr 4096 ram 4096
> 	extent compression(none)
>     item 23 key (258 EXTENT_DATA 4096) itemoff 14906 itemsize 53
> 	extent data disk byte 1103101952 nr 1048576
> 	extent data offset 4096 nr 1044480 ram 1048576
> 	extent compression(none)
> 
> When send, inode 258 file offset 4096~1048576 (item 23) has a
> chance to clone_range, but because data_offset does not match
> inode 257 (item 16), it causes missed clone and can only transfer
> actual data.
> 
> Improve the problem by judging whether the current data_offset
> has overlap with the file extent item, and if so, adjusting
> offset and extent_len so that we can clone correctly.
> 
> Signed-off-by: Robbie Ko <robbieko@xxxxxxxxxxxx>

Added to misc-next, thanks.



[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux