diff options
author | Miao Xie <miaox@cn.fujitsu.com> | 2011-02-18 10:21:17 +0100 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2011-03-10 17:21:49 +0100 |
commit | 7e6b6465e6efbca3985258996be9c189da96c8bf (patch) | |
tree | d4cde91d45865effa20fca9a789813321808c129 | |
parent | btrfs: fix dip leak (diff) | |
download | linux-7e6b6465e6efbca3985258996be9c189da96c8bf.tar.xz linux-7e6b6465e6efbca3985258996be9c189da96c8bf.zip |
btrfs: fix not enough reserved space
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>
-rw-r--r-- | fs/btrfs/inode.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index e7a8303328b2..db67821ccac2 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -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; |