bdev: cleanup passthru vbdev
A few small changes for readability and one changed examine error returns to breaks to assure examine_done() is called in those cases. Change-Id: If21ecdfa9ce1d6dbeeff4ced4e73425cec5940e1 Signed-off-by: Paul Luse <paul.e.luse@intel.com> Reviewed-on: https://review.gerrithub.io/406818 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
d734471b93
commit
8988543dbf
@ -310,48 +310,50 @@ vbdev_passthru_init(void)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
sp = spdk_conf_find_section(NULL, "passthru");
|
sp = spdk_conf_find_section(NULL, "passthru");
|
||||||
if (sp != NULL) {
|
if (sp == NULL) {
|
||||||
for (i = 0; ; i++) {
|
return 0;
|
||||||
if (!spdk_conf_section_get_nval(sp, "PT", i)) {
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
conf_bdev_name = spdk_conf_section_get_nmval(sp, "PT", i, 0);
|
for (i = 0; ; i++) {
|
||||||
if (!conf_bdev_name) {
|
if (!spdk_conf_section_get_nval(sp, "PT", i)) {
|
||||||
SPDK_ERRLOG("Passthru configuration missing bdev name\n");
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
conf_vbdev_name = spdk_conf_section_get_nmval(sp, "PT", i, 1);
|
|
||||||
if (!conf_vbdev_name) {
|
|
||||||
SPDK_ERRLOG("Passthru configuration missing pt_bdev name\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
name = calloc(1, sizeof(struct bdev_names));
|
|
||||||
if (!name) {
|
|
||||||
SPDK_ERRLOG("could not allocate bdev_names\n");
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
name->bdev_name = strdup(conf_bdev_name);
|
|
||||||
if (!name->bdev_name) {
|
|
||||||
SPDK_ERRLOG("could not allocate name->bdev_name\n");
|
|
||||||
free(name);
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
name->vbdev_name = strdup(conf_vbdev_name);
|
|
||||||
if (!name->vbdev_name) {
|
|
||||||
SPDK_ERRLOG("could not allocate name->vbdev_name\n");
|
|
||||||
free(name->bdev_name);
|
|
||||||
free(name);
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
TAILQ_INSERT_TAIL(&g_bdev_names, name, link);
|
|
||||||
}
|
}
|
||||||
TAILQ_FOREACH(name, &g_bdev_names, link) {
|
|
||||||
SPDK_NOTICELOG("conf parse matched: %s\n", name->bdev_name);
|
conf_bdev_name = spdk_conf_section_get_nmval(sp, "PT", i, 0);
|
||||||
|
if (!conf_bdev_name) {
|
||||||
|
SPDK_ERRLOG("Passthru configuration missing bdev name\n");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
conf_vbdev_name = spdk_conf_section_get_nmval(sp, "PT", i, 1);
|
||||||
|
if (!conf_vbdev_name) {
|
||||||
|
SPDK_ERRLOG("Passthru configuration missing pt_bdev name\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
name = calloc(1, sizeof(struct bdev_names));
|
||||||
|
if (!name) {
|
||||||
|
SPDK_ERRLOG("could not allocate bdev_names\n");
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
name->bdev_name = strdup(conf_bdev_name);
|
||||||
|
if (!name->bdev_name) {
|
||||||
|
SPDK_ERRLOG("could not allocate name->bdev_name\n");
|
||||||
|
free(name);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
|
name->vbdev_name = strdup(conf_vbdev_name);
|
||||||
|
if (!name->vbdev_name) {
|
||||||
|
SPDK_ERRLOG("could not allocate name->vbdev_name\n");
|
||||||
|
free(name->bdev_name);
|
||||||
|
free(name);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
TAILQ_INSERT_TAIL(&g_bdev_names, name, link);
|
||||||
|
}
|
||||||
|
TAILQ_FOREACH(name, &g_bdev_names, link) {
|
||||||
|
SPDK_NOTICELOG("conf parse matched: %s\n", name->bdev_name);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -437,77 +439,79 @@ vbdev_passthru_examine(struct spdk_bdev *bdev)
|
|||||||
* there's a match, create the pt_node & bdev accordingly.
|
* there's a match, create the pt_node & bdev accordingly.
|
||||||
*/
|
*/
|
||||||
TAILQ_FOREACH(name, &g_bdev_names, link) {
|
TAILQ_FOREACH(name, &g_bdev_names, link) {
|
||||||
if (strcmp(name->bdev_name, bdev->name) == 0) {
|
if (strcmp(name->bdev_name, bdev->name) != 0) {
|
||||||
SPDK_NOTICELOG("Match on %s\n", bdev->name);
|
continue;
|
||||||
pt_node = calloc(1, sizeof(struct vbdev_passthru));
|
|
||||||
if (!pt_node) {
|
|
||||||
SPDK_ERRLOG("could not allocate pt_node\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The base bdev that we're attaching to. */
|
|
||||||
pt_node->base_bdev = bdev;
|
|
||||||
pt_node->pt_bdev.name = strdup(name->vbdev_name);
|
|
||||||
if (!pt_node->pt_bdev.name) {
|
|
||||||
SPDK_ERRLOG("could not allocate pt_bdev name\n");
|
|
||||||
free(pt_node);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
pt_node->pt_bdev.product_name = "passthru";
|
|
||||||
|
|
||||||
/* Copy some properties from the underying base bdev. */
|
|
||||||
pt_node->pt_bdev.write_cache = bdev->write_cache;
|
|
||||||
pt_node->pt_bdev.need_aligned_buffer = bdev->need_aligned_buffer;
|
|
||||||
pt_node->pt_bdev.optimal_io_boundary = bdev->optimal_io_boundary;
|
|
||||||
pt_node->pt_bdev.blocklen = bdev->blocklen;
|
|
||||||
pt_node->pt_bdev.blockcnt = bdev->blockcnt;
|
|
||||||
|
|
||||||
/* This is the context that is passed to us when the bdev
|
|
||||||
* layer calls in so we'll save our pt_bdev node here.
|
|
||||||
*/
|
|
||||||
pt_node->pt_bdev.ctxt = pt_node;
|
|
||||||
pt_node->pt_bdev.fn_table = &vbdev_passthru_fn_table;
|
|
||||||
pt_node->pt_bdev.module = &passthru_if;
|
|
||||||
TAILQ_INSERT_TAIL(&g_pt_nodes, pt_node, link);
|
|
||||||
|
|
||||||
spdk_io_device_register(pt_node, pt_bdev_ch_create_cb, pt_bdev_ch_destroy_cb,
|
|
||||||
sizeof(struct pt_io_channel));
|
|
||||||
SPDK_NOTICELOG("io_device created at: 0x%p\n", pt_node);
|
|
||||||
|
|
||||||
rc = spdk_bdev_open(bdev, true, vbdev_passthru_examine_hotremove_cb,
|
|
||||||
bdev, &pt_node->base_desc);
|
|
||||||
if (rc) {
|
|
||||||
SPDK_ERRLOG("could not open bdev %s\n", spdk_bdev_get_name(bdev));
|
|
||||||
TAILQ_REMOVE(&g_pt_nodes, pt_node, link);
|
|
||||||
free(pt_node->pt_bdev.name);
|
|
||||||
free(pt_node);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
SPDK_NOTICELOG("bdev opened\n");
|
|
||||||
|
|
||||||
rc = spdk_bdev_module_claim_bdev(bdev, pt_node->base_desc, pt_node->pt_bdev.module);
|
|
||||||
if (rc) {
|
|
||||||
SPDK_ERRLOG("could not claim bdev %s\n", spdk_bdev_get_name(bdev));
|
|
||||||
spdk_bdev_close(pt_node->base_desc);
|
|
||||||
TAILQ_REMOVE(&g_pt_nodes, pt_node, link);
|
|
||||||
free(pt_node->pt_bdev.name);
|
|
||||||
free(pt_node);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
SPDK_NOTICELOG("bdev claimed\n");
|
|
||||||
|
|
||||||
rc = spdk_vbdev_register(&pt_node->pt_bdev, &bdev, 1);
|
|
||||||
if (rc) {
|
|
||||||
SPDK_ERRLOG("could not register pt_bdev\n");
|
|
||||||
spdk_bdev_close(pt_node->base_desc);
|
|
||||||
TAILQ_REMOVE(&g_pt_nodes, pt_node, link);
|
|
||||||
free(pt_node->pt_bdev.name);
|
|
||||||
free(pt_node);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
SPDK_NOTICELOG("pt_bdev registered\n");
|
|
||||||
SPDK_NOTICELOG("created pt_bdev for: %s\n", name->vbdev_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SPDK_NOTICELOG("Match on %s\n", bdev->name);
|
||||||
|
pt_node = calloc(1, sizeof(struct vbdev_passthru));
|
||||||
|
if (!pt_node) {
|
||||||
|
SPDK_ERRLOG("could not allocate pt_node\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The base bdev that we're attaching to. */
|
||||||
|
pt_node->base_bdev = bdev;
|
||||||
|
pt_node->pt_bdev.name = strdup(name->vbdev_name);
|
||||||
|
if (!pt_node->pt_bdev.name) {
|
||||||
|
SPDK_ERRLOG("could not allocate pt_bdev name\n");
|
||||||
|
free(pt_node);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pt_node->pt_bdev.product_name = "passthru";
|
||||||
|
|
||||||
|
/* Copy some properties from the underying base bdev. */
|
||||||
|
pt_node->pt_bdev.write_cache = bdev->write_cache;
|
||||||
|
pt_node->pt_bdev.need_aligned_buffer = bdev->need_aligned_buffer;
|
||||||
|
pt_node->pt_bdev.optimal_io_boundary = bdev->optimal_io_boundary;
|
||||||
|
pt_node->pt_bdev.blocklen = bdev->blocklen;
|
||||||
|
pt_node->pt_bdev.blockcnt = bdev->blockcnt;
|
||||||
|
|
||||||
|
/* This is the context that is passed to us when the bdev
|
||||||
|
* layer calls in so we'll save our pt_bdev node here.
|
||||||
|
*/
|
||||||
|
pt_node->pt_bdev.ctxt = pt_node;
|
||||||
|
pt_node->pt_bdev.fn_table = &vbdev_passthru_fn_table;
|
||||||
|
pt_node->pt_bdev.module = &passthru_if;
|
||||||
|
TAILQ_INSERT_TAIL(&g_pt_nodes, pt_node, link);
|
||||||
|
|
||||||
|
spdk_io_device_register(pt_node, pt_bdev_ch_create_cb, pt_bdev_ch_destroy_cb,
|
||||||
|
sizeof(struct pt_io_channel));
|
||||||
|
SPDK_NOTICELOG("io_device created at: 0x%p\n", pt_node);
|
||||||
|
|
||||||
|
rc = spdk_bdev_open(bdev, true, vbdev_passthru_examine_hotremove_cb,
|
||||||
|
bdev, &pt_node->base_desc);
|
||||||
|
if (rc) {
|
||||||
|
SPDK_ERRLOG("could not open bdev %s\n", spdk_bdev_get_name(bdev));
|
||||||
|
TAILQ_REMOVE(&g_pt_nodes, pt_node, link);
|
||||||
|
free(pt_node->pt_bdev.name);
|
||||||
|
free(pt_node);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SPDK_NOTICELOG("bdev opened\n");
|
||||||
|
|
||||||
|
rc = spdk_bdev_module_claim_bdev(bdev, pt_node->base_desc, pt_node->pt_bdev.module);
|
||||||
|
if (rc) {
|
||||||
|
SPDK_ERRLOG("could not claim bdev %s\n", spdk_bdev_get_name(bdev));
|
||||||
|
spdk_bdev_close(pt_node->base_desc);
|
||||||
|
TAILQ_REMOVE(&g_pt_nodes, pt_node, link);
|
||||||
|
free(pt_node->pt_bdev.name);
|
||||||
|
free(pt_node);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SPDK_NOTICELOG("bdev claimed\n");
|
||||||
|
|
||||||
|
rc = spdk_vbdev_register(&pt_node->pt_bdev, &bdev, 1);
|
||||||
|
if (rc) {
|
||||||
|
SPDK_ERRLOG("could not register pt_bdev\n");
|
||||||
|
spdk_bdev_close(pt_node->base_desc);
|
||||||
|
TAILQ_REMOVE(&g_pt_nodes, pt_node, link);
|
||||||
|
free(pt_node->pt_bdev.name);
|
||||||
|
free(pt_node);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
SPDK_NOTICELOG("pt_bdev registered\n");
|
||||||
|
SPDK_NOTICELOG("created pt_bdev for: %s\n", name->vbdev_name);
|
||||||
}
|
}
|
||||||
spdk_bdev_module_examine_done(&passthru_if);
|
spdk_bdev_module_examine_done(&passthru_if);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user