Skip to content

Commit d72c084

Browse files
Li Zefanchrismason-xx
Li Zefan
authored andcommitted
Btrfs: calc file extent num_bytes correctly in file clone
num_bytes should be 4096 not 12288. Signed-off-by: Li Zefan <[email protected]> Signed-off-by: Chris Mason <[email protected]>
1 parent 4815053 commit d72c084

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

fs/btrfs/ioctl.c

+10-3
Original file line numberDiff line numberDiff line change
@@ -2333,14 +2333,21 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
23332333

23342334
if (type == BTRFS_FILE_EXTENT_REG ||
23352335
type == BTRFS_FILE_EXTENT_PREALLOC) {
2336+
/*
2337+
* a | --- range to clone ---| b
2338+
* | ------------- extent ------------- |
2339+
*/
2340+
2341+
/* substract range b */
2342+
if (key.offset + datal > off + len)
2343+
datal = off + len - key.offset;
2344+
2345+
/* substract range a */
23362346
if (off > key.offset) {
23372347
datao += off - key.offset;
23382348
datal -= off - key.offset;
23392349
}
23402350

2341-
if (key.offset + datal > off + len)
2342-
datal = off + len - key.offset;
2343-
23442351
ret = btrfs_drop_extents(trans, inode,
23452352
new_key.offset,
23462353
new_key.offset + datal,

0 commit comments

Comments
 (0)