summaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorMiao Xie <miaox@cn.fujitsu.com>2011-04-13 07:19:21 +0200
committerLi Zefan <lizf@cn.fujitsu.com>2011-04-13 08:25:32 +0200
commit3153495d8ed6a9bb9f00aea42c18dc488a885dd6 (patch)
treeee1b57cff9be737fee9d4e35290e3c6586785de8 /fs
parentBtrfs: Check if btrfs_next_leaf() returns error in btrfs_real_readdir() (diff)
downloadlinux-3153495d8ed6a9bb9f00aea42c18dc488a885dd6.tar.xz
linux-3153495d8ed6a9bb9f00aea42c18dc488a885dd6.zip
Btrfs: Fix incorrect inode nlink in btrfs_link()
Link count of the inode is not decreased if btrfs_set_inode_index() fails. Signed-off-by: Miao Xie <miaox@cn.fujitsu.com> Singed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/btrfs/inode.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index b9f7f5258343..a4157cfdd533 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -4846,9 +4846,6 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
if (inode->i_nlink == ~0U)
return -EMLINK;
- btrfs_inc_nlink(inode);
- inode->i_ctime = CURRENT_TIME;
-
err = btrfs_set_inode_index(dir, &index);
if (err)
goto fail;
@@ -4864,6 +4861,9 @@ static int btrfs_link(struct dentry *old_dentry, struct inode *dir,
goto fail;
}
+ btrfs_inc_nlink(inode);
+ inode->i_ctime = CURRENT_TIME;
+
btrfs_set_trans_block_group(trans, dir);
ihold(inode);