ut/vbdev_lvol: fix spdk_bdev_unregsiter() path

Instead of calling vbdev_lvol_unregister() hooked up
to the destruct callback, use spdk_bdev_unregister()
directly.

The spdk_bdev_unregister() is always asynchronous
and callbacks are delayed until spdk_bdev_destruct_done().
This is now corrected in the stubs.

Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Change-Id: I50683c71be80b1baa8bf3b39a05ca631ac527c2e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/9155
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
This commit is contained in:
Tomasz Zawadzki 2021-08-11 03:50:09 -04:00
parent 074a63d507
commit 2aeee54686

View File

@ -124,6 +124,9 @@ spdk_bdev_alias_del_all(struct spdk_bdev *bdev)
void
spdk_bdev_destruct_done(struct spdk_bdev *bdev, int bdeverrno)
{
CU_ASSERT(bdeverrno == 0);
SPDK_CU_ASSERT_FATAL(bdev->internal.unregister_cb != NULL);
bdev->internal.unregister_cb(bdev->internal.unregister_ctx, bdeverrno);
}
void
@ -261,16 +264,23 @@ spdk_bs_bdev_claim(struct spdk_bs_dev *bs_dev, struct spdk_bdev_module *module)
return 0;
}
static void
_spdk_bdev_unregister_cb(void *cb_arg, int rc)
{
CU_ASSERT(rc == 0);
}
void
spdk_bdev_unregister(struct spdk_bdev *vbdev, spdk_bdev_unregister_cb cb_fn, void *cb_arg)
{
int rc;
SPDK_CU_ASSERT_FATAL(vbdev != NULL);
rc = vbdev->fn_table->destruct(vbdev->ctxt);
vbdev->internal.unregister_cb = cb_fn;
vbdev->internal.unregister_ctx = cb_arg;
SPDK_CU_ASSERT_FATAL(cb_fn != NULL);
cb_fn(cb_arg, rc);
rc = vbdev->fn_table->destruct(vbdev->ctxt);
CU_ASSERT(rc == 1);
}
void
@ -1070,7 +1080,7 @@ ut_lvol_destroy(void)
CU_ASSERT(g_lvolerrno == 0);
/* Hot remove lvol bdev */
vbdev_lvol_unregister(lvol2);
spdk_bdev_unregister(lvol2->bdev, _spdk_bdev_unregister_cb, NULL);
/* Unload lvol store */
vbdev_lvs_unload(lvs, lvol_store_op_complete, NULL);