btrfs: fix not enough reserved space
authorMiao Xie <miaox@cn.fujitsu.com>
Fri, 18 Feb 2011 09:21:17 +0000 (09:21 +0000)
committerChris Mason <chris.mason@oracle.com>
Thu, 10 Mar 2011 16:21:49 +0000 (11:21 -0500)
btrfs_link() will insert 3 items(inode ref, dir name item and dir index item)
into the b+ tree and update 2 items(its inode, and parent's inode) in the b+
tree. So we should reserve space for these 5 items, not 3 items.

Reported-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/inode.c

index e7a8303328b2eeb5a7397a94e5f279ebadebf0bf..db67821ccac296cf23d1cbe57e581971292320df 100644 (file)
@@ -4823,10 +4823,11 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
                goto fail;
 
        /*
-        * 1 item for inode ref
+        * 2 items for inode and inode ref
         * 2 items for dir items
+        * 1 item for parent inode
         */
-       trans = btrfs_start_transaction(root, 3);
+       trans = btrfs_start_transaction(root, 5);
        if (IS_ERR(trans)) {
                err = PTR_ERR(trans);
                goto fail;