blobstore: always destroy bs_dev during spdk_bs_init()

Now bs_dev is destroyed only in two instances:
- within spdk_bs_init() on failure path
- vbdev_lvs_create() if spdk_lvs_init() errors out,
before even calling spdk_bs_init()

Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Change-Id: I7b8af39fbe83907b0c47797f0f55ca3b941729d9
Reviewed-on: https://review.gerrithub.io/379848
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Paul Luse <paul.e.luse@intel.com>
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
Tomasz Zawadzki 2017-09-25 13:57:23 +02:00 committed by Daniel Verkamp
parent 52207d7800
commit 9a58c40eba
4 changed files with 3 additions and 10 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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 {

View File

@ -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);