Commit 14ed830d authored by Junchao Sun's avatar Junchao Sun Committed by David Sterba
Browse files

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: default avatarQu Wenruo <wqu@suse.com>
Signed-off-by: default avatarJunchao Sun <sunjunchao2870@gmail.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 81891974
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -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;
}

/*