bdev/lvol: Use spdk_bdev_create_bs_dev_ext() when creating lvol store

This is a drop-in replacement. The following patches will remove
spdk_bdev_get_by_name() from the operation to create lvol store.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I31688cf98625f1d13012281d89f06d343e2f2cef
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4705
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
This commit is contained in:
Shuhei Matsumoto 2020-10-15 01:34:23 +09:00 committed by Tomasz Zawadzki
parent 9b32f4858c
commit 6051368da9
2 changed files with 31 additions and 12 deletions

View File

@ -150,9 +150,8 @@ vbdev_get_lvs_bdev_by_bdev(struct spdk_bdev *bdev_orig)
}
static void
vbdev_lvs_hotremove_cb(void *ctx)
vbdev_lvs_hotremove_cb(struct spdk_bdev *bdev)
{
struct spdk_bdev *bdev = ctx;
struct lvol_store_bdev *lvs_bdev;
lvs_bdev = vbdev_get_lvs_bdev_by_bdev(bdev);
@ -161,6 +160,20 @@ vbdev_lvs_hotremove_cb(void *ctx)
}
}
static void
vbdev_lvs_base_bdev_event_cb(enum spdk_bdev_event_type type, struct spdk_bdev *bdev,
void *event_ctx)
{
switch (type) {
case SPDK_BDEV_EVENT_REMOVE:
vbdev_lvs_hotremove_cb(bdev);
break;
default:
SPDK_NOTICELOG("Unsupported bdev event: type %d\n", type);
break;
}
}
static void
_vbdev_lvs_create_cb(void *cb_arg, struct spdk_lvol_store *lvs, int lvserrno)
{
@ -246,11 +259,12 @@ vbdev_lvs_create(struct spdk_bdev *base_bdev, const char *name, uint32_t cluster
return -ENOMEM;
}
bs_dev = spdk_bdev_create_bs_dev(base_bdev, vbdev_lvs_hotremove_cb, base_bdev);
if (!bs_dev) {
rc = spdk_bdev_create_bs_dev_ext(base_bdev->name, vbdev_lvs_base_bdev_event_cb,
NULL, &bs_dev);
if (rc < 0) {
SPDK_ERRLOG("Cannot create blobstore device\n");
free(lvs_req);
return -ENODEV;
return rc;
}
lvs_req->bs_dev = bs_dev;
@ -1299,6 +1313,7 @@ vbdev_lvs_examine(struct spdk_bdev *bdev)
{
struct spdk_bs_dev *bs_dev;
struct spdk_lvs_with_handle_req *req;
int rc;
req = calloc(1, sizeof(*req));
if (req == NULL) {
@ -1307,8 +1322,9 @@ vbdev_lvs_examine(struct spdk_bdev *bdev)
return;
}
bs_dev = spdk_bdev_create_bs_dev(bdev, vbdev_lvs_hotremove_cb, bdev);
if (!bs_dev) {
rc = spdk_bdev_create_bs_dev_ext(bdev->name, vbdev_lvs_base_bdev_event_cb,
NULL, &bs_dev);
if (rc < 0) {
SPDK_INFOLOG(vbdev_lvol, "Cannot create bs dev on %s\n", bdev->name);
spdk_bdev_module_examine_done(&g_lvol_if);
free(req);

View File

@ -293,20 +293,23 @@ bdev_blob_destroy(struct spdk_bs_dev *bs_dev)
lvol_already_opened = false;
}
struct spdk_bs_dev *
spdk_bdev_create_bs_dev(struct spdk_bdev *bdev, spdk_bdev_remove_cb_t remove_cb, void *remove_ctx)
int
spdk_bdev_create_bs_dev_ext(const char *bdev_name, spdk_bdev_event_cb_t event_cb,
void *event_ctx, struct spdk_bs_dev **_bs_dev)
{
struct spdk_bs_dev *bs_dev;
if (lvol_already_opened == true || bdev == NULL) {
return NULL;
if (lvol_already_opened == true) {
return -EINVAL;
}
bs_dev = calloc(1, sizeof(*bs_dev));
SPDK_CU_ASSERT_FATAL(bs_dev != NULL);
bs_dev->destroy = bdev_blob_destroy;
return bs_dev;
*_bs_dev = bs_dev;
return 0;
}
void