diff options
author | Filipe Brandenburger <filbranden@google.com> | 2012-11-29 22:40:09 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@fusionio.com> | 2012-12-16 20:46:17 -0500 |
commit | 43baa579b3b1f059f68c51ef754ec59c87a35745 (patch) | |
tree | 2608bbb8fe5399d5e8c584c3807f2da449664247 /fs/btrfs/inode.c | |
parent | 2794ed013b3551cbae887ea1b93c52aaacb7370d (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.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 | } |