Btrfs: call inode_dec_link_count() on mkdir error path
authorWang Shilong <wangshilong1991@gmail.com>
Wed, 24 Dec 2014 06:45:30 +0000 (14:45 +0800)
committerChris Mason <clm@fb.com>
Fri, 2 Jan 2015 19:47:55 +0000 (14:47 -0500)
In btrfs_mkdir(), if it fails to create dir, we should
clean up existed items, setting inode's link properly
to make sure it could be cleaned up properly.

Signed-off-by: Wang Shilong <wangshilong1991@gmail.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/inode.c

index 8de23355f6cf66d8c97531157301ec7e8384d61a..8a036ed234ad44ae5dd3a43692f3de2452261c35 100644 (file)
@@ -6255,8 +6255,10 @@ static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
 
 out_fail:
        btrfs_end_transaction(trans, root);
-       if (drop_on_err)
+       if (drop_on_err) {
+               inode_dec_link_count(inode);
                iput(inode);
+       }
        btrfs_balance_delayed_items(root);
        btrfs_btree_balance_dirty(root);
        return err;