diff options
author | Sage Weil <sage@newdream.net> | 2011-09-20 14:48:51 -0400 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2011-09-20 14:48:51 -0400 |
commit | b6f3409b2197e8fcedb43e6600e37b7cfbe0715b (patch) | |
tree | f4001140db592992982a323bc18553cb9d7c5682 | |
parent | dde820fbf7176b64daddc1856597d9c61dac19e2 (diff) |
Btrfs: reserve sufficient space for ioctl clone
Fix a crash/BUG_ON in the clone ioctl due to insufficient reservation. We
need to reserve space for:
- adjusting the old extent (possibly splitting it)
- adding the new extent
- updating the inode
Signed-off-by: Sage Weil <sage@newdream.net>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
-rw-r--r-- | fs/btrfs/ioctl.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 9947a0ac7bd5..6f89bcc4e555 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c | |||
@@ -2336,7 +2336,12 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd, | |||
2336 | else | 2336 | else |
2337 | new_key.offset = destoff; | 2337 | new_key.offset = destoff; |
2338 | 2338 | ||
2339 | trans = btrfs_start_transaction(root, 1); | 2339 | /* |
2340 | * 1 - adjusting old extent (we may have to split it) | ||
2341 | * 1 - add new extent | ||
2342 | * 1 - inode update | ||
2343 | */ | ||
2344 | trans = btrfs_start_transaction(root, 3); | ||
2340 | if (IS_ERR(trans)) { | 2345 | if (IS_ERR(trans)) { |
2341 | ret = PTR_ERR(trans); | 2346 | ret = PTR_ERR(trans); |
2342 | goto out; | 2347 | goto out; |