Btrfs: fix file clone ioctl for bookend extents
The file clone ioctl was incorrectly taking the offset into the extent on disk into account when calculating the length of the cloned extent. The length never changes based on the offset into the physical extent. Test case: fallocate -l 1g image mke2fs image bcp image image2 e2fsck -f image2 (errors on image2) The math bug ends up wrapping the length of the extent, and things go wrong from there. Signed-off-by: Chris Mason <chris.mason@oracle.com>
This commit is contained in:
parent
e9061e2148
commit
ac6889cbb2
|
@ -1123,8 +1123,10 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
|
|||
datao += off - key.offset;
|
||||
datal -= off - key.offset;
|
||||
}
|
||||
if (key.offset + datao + datal > off + len)
|
||||
datal = off + len - key.offset - datao;
|
||||
|
||||
if (key.offset + datal > off + len)
|
||||
datal = off + len - key.offset;
|
||||
|
||||
/* disko == 0 means it's a hole */
|
||||
if (!disko)
|
||||
datao = 0;
|
||||
|
|
Loading…
Reference in a new issue