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
|
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;
|
struct lvol_store_bdev *lvs_bdev;
|
||||||
|
|
||||||
lvs_bdev = vbdev_get_lvs_bdev_by_bdev(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
|
static void
|
||||||
_vbdev_lvs_create_cb(void *cb_arg, struct spdk_lvol_store *lvs, int lvserrno)
|
_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;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
bs_dev = spdk_bdev_create_bs_dev(base_bdev, vbdev_lvs_hotremove_cb, base_bdev);
|
rc = spdk_bdev_create_bs_dev_ext(base_bdev->name, vbdev_lvs_base_bdev_event_cb,
|
||||||
if (!bs_dev) {
|
NULL, &bs_dev);
|
||||||
|
if (rc < 0) {
|
||||||
SPDK_ERRLOG("Cannot create blobstore device\n");
|
SPDK_ERRLOG("Cannot create blobstore device\n");
|
||||||
free(lvs_req);
|
free(lvs_req);
|
||||||
return -ENODEV;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvs_req->bs_dev = bs_dev;
|
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_bs_dev *bs_dev;
|
||||||
struct spdk_lvs_with_handle_req *req;
|
struct spdk_lvs_with_handle_req *req;
|
||||||
|
int rc;
|
||||||
|
|
||||||
req = calloc(1, sizeof(*req));
|
req = calloc(1, sizeof(*req));
|
||||||
if (req == NULL) {
|
if (req == NULL) {
|
||||||
@ -1307,8 +1322,9 @@ vbdev_lvs_examine(struct spdk_bdev *bdev)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bs_dev = spdk_bdev_create_bs_dev(bdev, vbdev_lvs_hotremove_cb, bdev);
|
rc = spdk_bdev_create_bs_dev_ext(bdev->name, vbdev_lvs_base_bdev_event_cb,
|
||||||
if (!bs_dev) {
|
NULL, &bs_dev);
|
||||||
|
if (rc < 0) {
|
||||||
SPDK_INFOLOG(vbdev_lvol, "Cannot create bs dev on %s\n", bdev->name);
|
SPDK_INFOLOG(vbdev_lvol, "Cannot create bs dev on %s\n", bdev->name);
|
||||||
spdk_bdev_module_examine_done(&g_lvol_if);
|
spdk_bdev_module_examine_done(&g_lvol_if);
|
||||||
free(req);
|
free(req);
|
||||||
|
@ -293,20 +293,23 @@ bdev_blob_destroy(struct spdk_bs_dev *bs_dev)
|
|||||||
lvol_already_opened = false;
|
lvol_already_opened = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct spdk_bs_dev *
|
int
|
||||||
spdk_bdev_create_bs_dev(struct spdk_bdev *bdev, spdk_bdev_remove_cb_t remove_cb, void *remove_ctx)
|
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;
|
struct spdk_bs_dev *bs_dev;
|
||||||
|
|
||||||
if (lvol_already_opened == true || bdev == NULL) {
|
if (lvol_already_opened == true) {
|
||||||
return NULL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bs_dev = calloc(1, sizeof(*bs_dev));
|
bs_dev = calloc(1, sizeof(*bs_dev));
|
||||||
SPDK_CU_ASSERT_FATAL(bs_dev != NULL);
|
SPDK_CU_ASSERT_FATAL(bs_dev != NULL);
|
||||||
bs_dev->destroy = bdev_blob_destroy;
|
bs_dev->destroy = bdev_blob_destroy;
|
||||||
|
|
||||||
return bs_dev;
|
*_bs_dev = bs_dev;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user