diff options
-rw-r--r-- | fs/btrfs/inode.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index adab791e1ce9..657f16d9c78b 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -4989,7 +4989,7 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry, | |||
4989 | struct btrfs_trans_handle *trans; | 4989 | struct btrfs_trans_handle *trans; |
4990 | struct btrfs_root *root = BTRFS_I(dir)->root; | 4990 | struct btrfs_root *root = BTRFS_I(dir)->root; |
4991 | struct inode *inode = NULL; | 4991 | struct inode *inode = NULL; |
4992 | int drop_inode = 0; | 4992 | int drop_inode_on_err = 0; |
4993 | int err; | 4993 | int err; |
4994 | u64 objectid; | 4994 | u64 objectid; |
4995 | u64 index = 0; | 4995 | u64 index = 0; |
@@ -5014,12 +5014,11 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry, | |||
5014 | err = PTR_ERR(inode); | 5014 | err = PTR_ERR(inode); |
5015 | goto out_unlock; | 5015 | goto out_unlock; |
5016 | } | 5016 | } |
5017 | drop_inode_on_err = 1; | ||
5017 | 5018 | ||
5018 | err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); | 5019 | err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); |
5019 | if (err) { | 5020 | if (err) |
5020 | drop_inode = 1; | ||
5021 | goto out_unlock; | 5021 | goto out_unlock; |
5022 | } | ||
5023 | 5022 | ||
5024 | /* | 5023 | /* |
5025 | * If the active LSM wants to access the inode during | 5024 | * If the active LSM wants to access the inode during |
@@ -5032,16 +5031,16 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry, | |||
5032 | 5031 | ||
5033 | err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); | 5032 | err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); |
5034 | if (err) | 5033 | if (err) |
5035 | drop_inode = 1; | 5034 | goto out_unlock; |
5036 | else { | 5035 | |
5037 | inode->i_mapping->a_ops = &btrfs_aops; | 5036 | inode->i_mapping->a_ops = &btrfs_aops; |
5038 | inode->i_mapping->backing_dev_info = &root->fs_info->bdi; | 5037 | inode->i_mapping->backing_dev_info = &root->fs_info->bdi; |
5039 | BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; | 5038 | BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; |
5040 | d_instantiate(dentry, inode); | 5039 | d_instantiate(dentry, inode); |
5041 | } | 5040 | |
5042 | out_unlock: | 5041 | out_unlock: |
5043 | btrfs_end_transaction(trans, root); | 5042 | btrfs_end_transaction(trans, root); |
5044 | if (drop_inode) { | 5043 | if (err && drop_inode_on_err) { |
5045 | inode_dec_link_count(inode); | 5044 | inode_dec_link_count(inode); |
5046 | iput(inode); | 5045 | iput(inode); |
5047 | } | 5046 | } |