aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
authorFilipe Brandenburger <filbranden@google.com>2012-11-29 22:40:09 -0500
committerChris Mason <chris.mason@fusionio.com>2012-12-16 20:46:17 -0500
commit43baa579b3b1f059f68c51ef754ec59c87a35745 (patch)
tree2608bbb8fe5399d5e8c584c3807f2da449664247 /fs/btrfs/inode.c
parent2794ed013b3551cbae887ea1b93c52aaacb7370d (diff)
Btrfs: refactor error handling to drop inode in btrfs_create()
Refactor it by checking whether the inode has been created and needs to be dropped (drop_inode_on_err) and also if the err variable is set. That way the variable doesn't need to be set on each and every error handling block. Signed-off-by: Filipe Brandenburger <filbranden@google.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c23
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
5042out_unlock: 5041out_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 }