aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2011-09-20 14:48:51 -0400
committerChris Mason <chris.mason@oracle.com>2011-09-20 14:48:51 -0400
commitb6f3409b2197e8fcedb43e6600e37b7cfbe0715b (patch)
treef4001140db592992982a323bc18553cb9d7c5682
parentdde820fbf7176b64daddc1856597d9c61dac19e2 (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.c7
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;