diff --git a/lib/bdev/lvol/vbdev_lvol.c b/lib/bdev/lvol/vbdev_lvol.c index d34152028..8522eea43 100644 --- a/lib/bdev/lvol/vbdev_lvol.c +++ b/lib/bdev/lvol/vbdev_lvol.c @@ -47,14 +47,12 @@ static void _vbdev_lvs_create_cb(void *cb_arg, struct spdk_lvol_store *lvs, int lvserrno) { struct spdk_lvs_with_handle_req *req = cb_arg; - struct spdk_bs_dev *bs_dev = req->bs_dev; struct lvol_store_bdev *lvs_bdev; struct spdk_bdev *bdev = req->base_bdev; if (lvserrno != 0) { assert(lvs == NULL); SPDK_INFOLOG(SPDK_TRACE_VBDEV_LVOL, "Cannot create lvol store bdev\n"); - bs_dev->destroy(bs_dev); goto end; } @@ -62,7 +60,6 @@ _vbdev_lvs_create_cb(void *cb_arg, struct spdk_lvol_store *lvs, int lvserrno) lvs_bdev = calloc(1, sizeof(*lvs_bdev)); if (!lvs_bdev) { - bs_dev->destroy(bs_dev); lvserrno = -ENOMEM; goto end; } diff --git a/lib/blob/blobstore.c b/lib/blob/blobstore.c index 4535beb62..9ec17281d 100644 --- a/lib/blob/blobstore.c +++ b/lib/blob/blobstore.c @@ -1707,6 +1707,7 @@ spdk_bs_init(struct spdk_bs_dev *dev, struct spdk_bs_opts *o, if ((SPDK_BS_PAGE_SIZE % dev->blocklen) != 0) { SPDK_ERRLOG("unsupported dev block length of %d\n", dev->blocklen); + dev->destroy(dev); cb_fn(cb_arg, NULL, -EINVAL); return; } @@ -1719,6 +1720,7 @@ spdk_bs_init(struct spdk_bs_dev *dev, struct spdk_bs_opts *o, bs = _spdk_bs_alloc(dev, &opts); if (!bs) { + dev->destroy(dev); cb_fn(cb_arg, NULL, -ENOMEM); return; } diff --git a/test/unit/lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c b/test/unit/lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c index 459c3318d..2e1f0cf0d 100644 --- a/test/unit/lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c +++ b/test/unit/lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c @@ -105,6 +105,7 @@ spdk_lvs_init(struct spdk_bs_dev *bs_dev, spdk_lvs_op_with_handle_complete cb_fn return -1; if (lvol_store_initialize_cb_fail) { + bs_dev->destroy(bs_dev); lvs = NULL; error = -1; } else { diff --git a/test/unit/lib/blob/blob.c/blob_ut.c b/test/unit/lib/blob/blob.c/blob_ut.c index 6ff04a2b4..e5fcced44 100644 --- a/test/unit/lib/blob/blob.c/blob_ut.c +++ b/test/unit/lib/blob/blob.c/blob_ut.c @@ -131,13 +131,6 @@ blob_init(void) dev->blocklen = 500; spdk_bs_init(dev, NULL, bs_op_with_handle_complete, NULL); CU_ASSERT(g_bserrno == -EINVAL); - /* - * Normally dev gets deleted as part of the dev->destroy callback. But - * that doesn't get invoked when init() fails. So manually free it here - * instead. Probably blobstore should still destroy the dev when init - * fails, but we'll do that in a separate patch. - */ - free(dev); dev = init_dev(); spdk_bs_init(dev, NULL, bs_op_with_handle_complete, NULL);