diff options
author | Junchao Sun <sunjunchao2870@gmail.com> | 2024-06-07 22:30:20 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.com> | 2024-09-10 16:51:18 +0200 |
commit | 14ed830d10322007565af3a0da39948f229a72d6 (patch) | |
tree | b4cec01b31843e6fcb6b2eb6c5083fd42d8600b0 /fs/btrfs/delayed-ref.c | |
parent | 8189197425e79f65281938ef29015ebfcf5deaa3 (diff) | |
download | lwn-14ed830d10322007565af3a0da39948f229a72d6.tar.gz lwn-14ed830d10322007565af3a0da39948f229a72d6.zip |
btrfs: qgroup: use goto style to handle errors in add_delayed_ref()
Clean up resources using goto to get rid of repeated code.
Reviewed-by: Qu Wenruo <wqu@suse.com>
Signed-off-by: Junchao Sun <sunjunchao2870@gmail.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'fs/btrfs/delayed-ref.c')
-rw-r--r-- | fs/btrfs/delayed-ref.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/fs/btrfs/delayed-ref.c b/fs/btrfs/delayed-ref.c index 06a9e0542d70..0bfa014b796d 100644 --- a/fs/btrfs/delayed-ref.c +++ b/fs/btrfs/delayed-ref.c @@ -1005,18 +1005,13 @@ static int add_delayed_ref(struct btrfs_trans_handle *trans, return -ENOMEM; head_ref = kmem_cache_alloc(btrfs_delayed_ref_head_cachep, GFP_NOFS); - if (!head_ref) { - kmem_cache_free(btrfs_delayed_ref_node_cachep, node); - return -ENOMEM; - } + if (!head_ref) + goto free_node; if (btrfs_qgroup_full_accounting(fs_info) && !generic_ref->skip_qgroup) { record = kzalloc(sizeof(*record), GFP_NOFS); - if (!record) { - kmem_cache_free(btrfs_delayed_ref_node_cachep, node); - kmem_cache_free(btrfs_delayed_ref_head_cachep, head_ref); - return -ENOMEM; - } + if (!record) + goto free_head_ref; } init_delayed_ref_common(fs_info, node, generic_ref); @@ -1052,6 +1047,12 @@ static int add_delayed_ref(struct btrfs_trans_handle *trans, if (qrecord_inserted) return btrfs_qgroup_trace_extent_post(trans, record); return 0; + +free_head_ref: + kmem_cache_free(btrfs_delayed_ref_head_cachep, head_ref); +free_node: + kmem_cache_free(btrfs_delayed_ref_node_cachep, node); + return -ENOMEM; } /* |