blob: allocate ctx in bs_alloc
The ctx allocation was duplicated after both bs_alloc calling sites, so this reduces the code a bit. This change also enables some future changes involving the used_clusters bit array. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: I4ea98f079dbe385654e9cb9c0c58a1926a990c9e Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3973 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
parent
39caf843a1
commit
04eb8e05d6
@ -3166,9 +3166,11 @@ struct spdk_bs_load_ctx {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
bs_alloc(struct spdk_bs_dev *dev, struct spdk_bs_opts *opts, struct spdk_blob_store **_bs)
|
bs_alloc(struct spdk_bs_dev *dev, struct spdk_bs_opts *opts, struct spdk_blob_store **_bs,
|
||||||
|
struct spdk_bs_load_ctx **_ctx)
|
||||||
{
|
{
|
||||||
struct spdk_blob_store *bs;
|
struct spdk_blob_store *bs;
|
||||||
|
struct spdk_bs_load_ctx *ctx;
|
||||||
uint64_t dev_size;
|
uint64_t dev_size;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
@ -3190,6 +3192,24 @@ bs_alloc(struct spdk_bs_dev *dev, struct spdk_bs_opts *opts, struct spdk_blob_st
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx = calloc(1, sizeof(struct spdk_bs_load_ctx));
|
||||||
|
if (!ctx) {
|
||||||
|
free(bs);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx->bs = bs;
|
||||||
|
ctx->iter_cb_fn = opts->iter_cb_fn;
|
||||||
|
ctx->iter_cb_arg = opts->iter_cb_arg;
|
||||||
|
|
||||||
|
ctx->super = spdk_zmalloc(sizeof(*ctx->super), 0x1000, NULL,
|
||||||
|
SPDK_ENV_SOCKET_ID_ANY, SPDK_MALLOC_DMA);
|
||||||
|
if (!ctx->super) {
|
||||||
|
free(ctx);
|
||||||
|
free(bs);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
TAILQ_INIT(&bs->blobs);
|
TAILQ_INIT(&bs->blobs);
|
||||||
TAILQ_INIT(&bs->snapshots);
|
TAILQ_INIT(&bs->snapshots);
|
||||||
bs->dev = dev;
|
bs->dev = dev;
|
||||||
@ -3210,6 +3230,8 @@ bs_alloc(struct spdk_bs_dev *dev, struct spdk_bs_opts *opts, struct spdk_blob_st
|
|||||||
bs->used_clusters = spdk_bit_array_create(bs->total_clusters);
|
bs->used_clusters = spdk_bit_array_create(bs->total_clusters);
|
||||||
bs->io_unit_size = dev->blocklen;
|
bs->io_unit_size = dev->blocklen;
|
||||||
if (bs->used_clusters == NULL) {
|
if (bs->used_clusters == NULL) {
|
||||||
|
spdk_free(ctx->super);
|
||||||
|
free(ctx);
|
||||||
free(bs);
|
free(bs);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
@ -3235,11 +3257,14 @@ bs_alloc(struct spdk_bs_dev *dev, struct spdk_bs_opts *opts, struct spdk_blob_st
|
|||||||
spdk_bit_array_free(&bs->used_blobids);
|
spdk_bit_array_free(&bs->used_blobids);
|
||||||
spdk_bit_array_free(&bs->used_md_pages);
|
spdk_bit_array_free(&bs->used_md_pages);
|
||||||
spdk_bit_array_free(&bs->used_clusters);
|
spdk_bit_array_free(&bs->used_clusters);
|
||||||
|
spdk_free(ctx->super);
|
||||||
|
free(ctx);
|
||||||
free(bs);
|
free(bs);
|
||||||
/* FIXME: this is a lie but don't know how to get a proper error code here */
|
/* FIXME: this is a lie but don't know how to get a proper error code here */
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*_ctx = ctx;
|
||||||
*_bs = bs;
|
*_bs = bs;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -4239,34 +4264,13 @@ spdk_bs_load(struct spdk_bs_dev *dev, struct spdk_bs_opts *o,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = bs_alloc(dev, &opts, &bs);
|
err = bs_alloc(dev, &opts, &bs, &ctx);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev->destroy(dev);
|
dev->destroy(dev);
|
||||||
cb_fn(cb_arg, NULL, err);
|
cb_fn(cb_arg, NULL, err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx = calloc(1, sizeof(*ctx));
|
|
||||||
if (!ctx) {
|
|
||||||
bs_free(bs);
|
|
||||||
cb_fn(cb_arg, NULL, -ENOMEM);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx->bs = bs;
|
|
||||||
ctx->iter_cb_fn = opts.iter_cb_fn;
|
|
||||||
ctx->iter_cb_arg = opts.iter_cb_arg;
|
|
||||||
|
|
||||||
/* Allocate memory for the super block */
|
|
||||||
ctx->super = spdk_zmalloc(sizeof(*ctx->super), 0x1000, NULL,
|
|
||||||
SPDK_ENV_SOCKET_ID_ANY, SPDK_MALLOC_DMA);
|
|
||||||
if (!ctx->super) {
|
|
||||||
free(ctx);
|
|
||||||
bs_free(bs);
|
|
||||||
cb_fn(cb_arg, NULL, -ENOMEM);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
cpl.type = SPDK_BS_CPL_TYPE_BS_HANDLE;
|
cpl.type = SPDK_BS_CPL_TYPE_BS_HANDLE;
|
||||||
cpl.u.bs_handle.cb_fn = cb_fn;
|
cpl.u.bs_handle.cb_fn = cb_fn;
|
||||||
cpl.u.bs_handle.cb_arg = cb_arg;
|
cpl.u.bs_handle.cb_arg = cb_arg;
|
||||||
@ -4509,34 +4513,16 @@ spdk_bs_dump(struct spdk_bs_dev *dev, FILE *fp, spdk_bs_dump_print_xattr print_x
|
|||||||
|
|
||||||
spdk_bs_opts_init(&opts);
|
spdk_bs_opts_init(&opts);
|
||||||
|
|
||||||
err = bs_alloc(dev, &opts, &bs);
|
err = bs_alloc(dev, &opts, &bs, &ctx);
|
||||||
if (err) {
|
if (err) {
|
||||||
dev->destroy(dev);
|
dev->destroy(dev);
|
||||||
cb_fn(cb_arg, err);
|
cb_fn(cb_arg, err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx = calloc(1, sizeof(*ctx));
|
|
||||||
if (!ctx) {
|
|
||||||
bs_free(bs);
|
|
||||||
cb_fn(cb_arg, -ENOMEM);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx->bs = bs;
|
|
||||||
ctx->fp = fp;
|
ctx->fp = fp;
|
||||||
ctx->print_xattr_fn = print_xattr_fn;
|
ctx->print_xattr_fn = print_xattr_fn;
|
||||||
|
|
||||||
/* Allocate memory for the super block */
|
|
||||||
ctx->super = spdk_zmalloc(sizeof(*ctx->super), 0x1000, NULL,
|
|
||||||
SPDK_ENV_SOCKET_ID_ANY, SPDK_MALLOC_DMA);
|
|
||||||
if (!ctx->super) {
|
|
||||||
free(ctx);
|
|
||||||
bs_free(bs);
|
|
||||||
cb_fn(cb_arg, -ENOMEM);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
cpl.type = SPDK_BS_CPL_TYPE_BS_BASIC;
|
cpl.type = SPDK_BS_CPL_TYPE_BS_BASIC;
|
||||||
cpl.u.bs_basic.cb_fn = cb_fn;
|
cpl.u.bs_basic.cb_fn = cb_fn;
|
||||||
cpl.u.bs_basic.cb_arg = cb_arg;
|
cpl.u.bs_basic.cb_arg = cb_arg;
|
||||||
@ -4620,7 +4606,7 @@ spdk_bs_init(struct spdk_bs_dev *dev, struct spdk_bs_opts *o,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
rc = bs_alloc(dev, &opts, &bs);
|
rc = bs_alloc(dev, &opts, &bs, &ctx);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
dev->destroy(dev);
|
dev->destroy(dev);
|
||||||
cb_fn(cb_arg, NULL, rc);
|
cb_fn(cb_arg, NULL, rc);
|
||||||
@ -4640,6 +4626,8 @@ spdk_bs_init(struct spdk_bs_dev *dev, struct spdk_bs_opts *o,
|
|||||||
}
|
}
|
||||||
rc = spdk_bit_array_resize(&bs->used_md_pages, bs->md_len);
|
rc = spdk_bit_array_resize(&bs->used_md_pages, bs->md_len);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
|
spdk_free(ctx->super);
|
||||||
|
free(ctx);
|
||||||
bs_free(bs);
|
bs_free(bs);
|
||||||
cb_fn(cb_arg, NULL, -ENOMEM);
|
cb_fn(cb_arg, NULL, -ENOMEM);
|
||||||
return;
|
return;
|
||||||
@ -4647,6 +4635,8 @@ spdk_bs_init(struct spdk_bs_dev *dev, struct spdk_bs_opts *o,
|
|||||||
|
|
||||||
rc = spdk_bit_array_resize(&bs->used_blobids, bs->md_len);
|
rc = spdk_bit_array_resize(&bs->used_blobids, bs->md_len);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
|
spdk_free(ctx->super);
|
||||||
|
free(ctx);
|
||||||
bs_free(bs);
|
bs_free(bs);
|
||||||
cb_fn(cb_arg, NULL, -ENOMEM);
|
cb_fn(cb_arg, NULL, -ENOMEM);
|
||||||
return;
|
return;
|
||||||
@ -4654,29 +4644,13 @@ spdk_bs_init(struct spdk_bs_dev *dev, struct spdk_bs_opts *o,
|
|||||||
|
|
||||||
rc = spdk_bit_array_resize(&bs->open_blobids, bs->md_len);
|
rc = spdk_bit_array_resize(&bs->open_blobids, bs->md_len);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
bs_free(bs);
|
spdk_free(ctx->super);
|
||||||
cb_fn(cb_arg, NULL, -ENOMEM);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx = calloc(1, sizeof(*ctx));
|
|
||||||
if (!ctx) {
|
|
||||||
bs_free(bs);
|
|
||||||
cb_fn(cb_arg, NULL, -ENOMEM);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx->bs = bs;
|
|
||||||
|
|
||||||
/* Allocate memory for the super block */
|
|
||||||
ctx->super = spdk_zmalloc(sizeof(*ctx->super), 0x1000, NULL,
|
|
||||||
SPDK_ENV_SOCKET_ID_ANY, SPDK_MALLOC_DMA);
|
|
||||||
if (!ctx->super) {
|
|
||||||
free(ctx);
|
free(ctx);
|
||||||
bs_free(bs);
|
bs_free(bs);
|
||||||
cb_fn(cb_arg, NULL, -ENOMEM);
|
cb_fn(cb_arg, NULL, -ENOMEM);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(ctx->super->signature, SPDK_BS_SUPER_BLOCK_SIG,
|
memcpy(ctx->super->signature, SPDK_BS_SUPER_BLOCK_SIG,
|
||||||
sizeof(ctx->super->signature));
|
sizeof(ctx->super->signature));
|
||||||
ctx->super->version = SPDK_BS_VERSION;
|
ctx->super->version = SPDK_BS_VERSION;
|
||||||
|
Loading…
Reference in New Issue
Block a user