summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2009-06-27 21:07:03 -0400
committerChris Mason <chris.mason@oracle.com>2009-07-02 13:41:16 -0400
commitc8a894d77de4a1e0a544577fd4eabc9aacd453a8 (patch)
tree536f2a4d775f3b4180a85d4192bae92fbd38347b /fs
parentf597bb19ccd034cbcf05e1194238e2c8d9505a8a (diff)
downloadlinux-stable-c8a894d77de4a1e0a544577fd4eabc9aacd453a8.tar.gz
linux-stable-c8a894d77de4a1e0a544577fd4eabc9aacd453a8.tar.bz2
linux-stable-c8a894d77de4a1e0a544577fd4eabc9aacd453a8.zip
Btrfs: fix the file clone ioctl for preallocated extents
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/ioctl.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index eff18f5b5362..9f4db848db10 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -1028,7 +1028,8 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
struct btrfs_file_extent_item);
comp = btrfs_file_extent_compression(leaf, extent);
type = btrfs_file_extent_type(leaf, extent);
- if (type == BTRFS_FILE_EXTENT_REG) {
+ if (type == BTRFS_FILE_EXTENT_REG ||
+ type == BTRFS_FILE_EXTENT_PREALLOC) {
disko = btrfs_file_extent_disk_bytenr(leaf,
extent);
diskl = btrfs_file_extent_disk_num_bytes(leaf,
@@ -1051,7 +1052,8 @@ static long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,
new_key.objectid = inode->i_ino;
new_key.offset = key.offset + destoff - off;
- if (type == BTRFS_FILE_EXTENT_REG) {
+ if (type == BTRFS_FILE_EXTENT_REG ||
+ type == BTRFS_FILE_EXTENT_PREALLOC) {
ret = btrfs_insert_empty_item(trans, root, path,
&new_key, size);
if (ret)