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:
parent
9b32f4858c
commit
6051368da9
@ -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);
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user