|
@@ -4989,7 +4989,7 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry,
|
|
|
struct btrfs_trans_handle *trans;
|
|
|
struct btrfs_root *root = BTRFS_I(dir)->root;
|
|
|
struct inode *inode = NULL;
|
|
|
- int drop_inode = 0;
|
|
|
+ int drop_inode_on_err = 0;
|
|
|
int err;
|
|
|
u64 objectid;
|
|
|
u64 index = 0;
|
|
@@ -5014,12 +5014,11 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry,
|
|
|
err = PTR_ERR(inode);
|
|
|
goto out_unlock;
|
|
|
}
|
|
|
+ drop_inode_on_err = 1;
|
|
|
|
|
|
err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name);
|
|
|
- if (err) {
|
|
|
- drop_inode = 1;
|
|
|
+ if (err)
|
|
|
goto out_unlock;
|
|
|
- }
|
|
|
|
|
|
/*
|
|
|
* If the active LSM wants to access the inode during
|
|
@@ -5032,16 +5031,16 @@ static int btrfs_create(struct inode *dir, struct dentry *dentry,
|
|
|
|
|
|
err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index);
|
|
|
if (err)
|
|
|
- drop_inode = 1;
|
|
|
- else {
|
|
|
- inode->i_mapping->a_ops = &btrfs_aops;
|
|
|
- inode->i_mapping->backing_dev_info = &root->fs_info->bdi;
|
|
|
- BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops;
|
|
|
- d_instantiate(dentry, inode);
|
|
|
- }
|
|
|
+ goto out_unlock;
|
|
|
+
|
|
|
+ inode->i_mapping->a_ops = &btrfs_aops;
|
|
|
+ inode->i_mapping->backing_dev_info = &root->fs_info->bdi;
|
|
|
+ BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops;
|
|
|
+ d_instantiate(dentry, inode);
|
|
|
+
|
|
|
out_unlock:
|
|
|
btrfs_end_transaction(trans, root);
|
|
|
- if (drop_inode) {
|
|
|
+ if (err && drop_inode_on_err) {
|
|
|
inode_dec_link_count(inode);
|
|
|
iput(inode);
|
|
|
}
|