From c1544908e00eb4af043eeecb79ac1c2266ebb95c Mon Sep 17 00:00:00 2001 From: Mike Gerdts Date: Thu, 15 Dec 2022 23:28:21 -0600 Subject: [PATCH] blobstore: use common return path in blob_resize() A future commit may need to release a lock before returning. This refactors blob_resize() to always return at end of the function using an out label and goto. Signed-off-by: Mike Gerdts Change-Id: I671fbdbe0e3b766c264c45589dad3a864ba1f192 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15982 Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto Community-CI: Mellanox Build Bot --- lib/blob/blobstore.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/blob/blobstore.c b/lib/blob/blobstore.c index 0f3cfc5b0..7c9c513ea 100644 --- a/lib/blob/blobstore.c +++ b/lib/blob/blobstore.c @@ -1971,6 +1971,7 @@ blob_resize(struct spdk_blob *blob, uint64_t sz) uint32_t *ep_tmp; uint64_t new_num_ep = 0, current_num_ep = 0; struct spdk_blob_store *bs; + int rc; bs = blob->bs; @@ -2001,14 +2002,16 @@ blob_resize(struct spdk_blob *blob, uint64_t sz) /* Check first that we have enough clusters and md pages before we start claiming them. */ if (sz > num_clusters && spdk_blob_is_thin_provisioned(blob) == false) { if ((sz - num_clusters) > bs->num_free_clusters) { - return -ENOSPC; + rc = -ENOSPC; + goto out; } lfmd = 0; for (i = current_num_ep; i < new_num_ep ; i++) { lfmd = spdk_bit_array_find_first_clear(blob->bs->used_md_pages, lfmd); if (lfmd == UINT32_MAX) { /* No more free md pages. Cannot satisfy the request */ - return -ENOSPC; + rc = -ENOSPC; + goto out; } } } @@ -2019,7 +2022,8 @@ blob_resize(struct spdk_blob *blob, uint64_t sz) */ tmp = realloc(blob->active.clusters, sizeof(*blob->active.clusters) * sz); if (sz > 0 && tmp == NULL) { - return -ENOMEM; + rc = -ENOMEM; + goto out; } memset(tmp + blob->active.cluster_array_size, 0, sizeof(*blob->active.clusters) * (sz - blob->active.cluster_array_size)); @@ -2030,7 +2034,8 @@ blob_resize(struct spdk_blob *blob, uint64_t sz) if (new_num_ep > current_num_ep && blob->use_extent_table) { ep_tmp = realloc(blob->active.extent_pages, sizeof(*blob->active.extent_pages) * new_num_ep); if (new_num_ep > 0 && ep_tmp == NULL) { - return -ENOMEM; + rc = -ENOMEM; + goto out; } memset(ep_tmp + blob->active.extent_pages_array_size, 0, sizeof(*blob->active.extent_pages) * (new_num_ep - blob->active.extent_pages_array_size)); @@ -2055,7 +2060,9 @@ blob_resize(struct spdk_blob *blob, uint64_t sz) blob->active.num_clusters = sz; blob->active.num_extent_pages = new_num_ep; - return 0; + rc = 0; +out: + return rc; } static void