bdev/zone: Pass bdev name instead of bdev pointer to vbdev_zone_register()

To reduce the patch size, use local variables for descriptor and
bdev pointer before allocating the bdev_zone_block structure.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Ie33fac33eeb39ccc2b016d2f9c1711fcf76ebd7a
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4649
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
Shuhei Matsumoto 2020-10-14 00:10:49 +09:00 committed by Tomasz Zawadzki
parent f766d1e478
commit c6358b974f

View File

@ -714,8 +714,10 @@ zone_block_init_zone_info(struct bdev_zone_block *bdev_node)
}
static int
zone_block_register(struct spdk_bdev *base_bdev)
zone_block_register(const char *base_bdev_name)
{
struct spdk_bdev_desc *base_desc;
struct spdk_bdev *base_bdev;
struct bdev_zone_block_config *name, *tmp;
struct bdev_zone_block *bdev_node;
uint64_t zone_size;
@ -725,23 +727,36 @@ zone_block_register(struct spdk_bdev *base_bdev)
* there's a match, create the bdev_node & bdev accordingly.
*/
TAILQ_FOREACH_SAFE(name, &g_bdev_configs, link, tmp) {
if (strcmp(name->bdev_name, base_bdev->name) != 0) {
if (strcmp(name->bdev_name, base_bdev_name) != 0) {
continue;
}
if (spdk_bdev_is_zoned(base_bdev)) {
SPDK_ERRLOG("Base bdev %s is already a zoned bdev\n", base_bdev->name);
rc = -EEXIST;
rc = spdk_bdev_open_ext(base_bdev_name, true, zone_block_base_bdev_event_cb,
NULL, &base_desc);
if (rc == -ENODEV) {
return -ENODEV;
} else if (rc) {
SPDK_ERRLOG("could not open bdev %s\n", base_bdev_name);
goto free_config;
}
base_bdev = spdk_bdev_desc_get_bdev(base_desc);
if (spdk_bdev_is_zoned(base_bdev)) {
SPDK_ERRLOG("Base bdev %s is already a zoned bdev\n", base_bdev_name);
rc = -EEXIST;
goto zone_exist;
}
bdev_node = calloc(1, sizeof(struct bdev_zone_block));
if (!bdev_node) {
rc = -ENOMEM;
SPDK_ERRLOG("could not allocate bdev_node\n");
goto free_config;
goto zone_exist;
}
bdev_node->base_desc = base_desc;
/* The base bdev that we're attaching to. */
bdev_node->bdev.name = strdup(name->vbdev_name);
if (!bdev_node->bdev.name) {
@ -816,19 +831,12 @@ zone_block_register(struct spdk_bdev *base_bdev)
sizeof(struct zone_block_io_channel),
name->vbdev_name);
rc = spdk_bdev_open_ext(spdk_bdev_get_name(base_bdev), true, zone_block_base_bdev_event_cb,
NULL, &bdev_node->base_desc);
if (rc) {
SPDK_ERRLOG("could not open bdev %s\n", spdk_bdev_get_name(base_bdev));
goto open_failed;
}
/* Save the thread where the base device is opened */
bdev_node->thread = spdk_get_thread();
rc = spdk_bdev_module_claim_bdev(base_bdev, bdev_node->base_desc, bdev_node->bdev.module);
rc = spdk_bdev_module_claim_bdev(base_bdev, base_desc, bdev_node->bdev.module);
if (rc) {
SPDK_ERRLOG("could not claim bdev %s\n", spdk_bdev_get_name(base_bdev));
SPDK_ERRLOG("could not claim bdev %s\n", base_bdev_name);
goto claim_failed;
}
@ -844,8 +852,6 @@ zone_block_register(struct spdk_bdev *base_bdev)
register_failed:
spdk_bdev_module_release_bdev(&bdev_node->bdev);
claim_failed:
spdk_bdev_close(bdev_node->base_desc);
open_failed:
TAILQ_REMOVE(&g_bdev_nodes, bdev_node, link);
spdk_io_device_unregister(bdev_node, NULL);
zone_info_failed:
@ -855,6 +861,8 @@ roundup_failed:
free(bdev_node->bdev.name);
strdup_failed:
free(bdev_node);
zone_exist:
spdk_bdev_close(base_desc);
free_config:
zone_block_remove_config(name);
return rc;
@ -864,7 +872,6 @@ int
vbdev_zone_block_create(const char *bdev_name, const char *vbdev_name, uint64_t zone_capacity,
uint64_t optimal_open_zones)
{
struct spdk_bdev *bdev = NULL;
int rc = 0;
if (zone_capacity == 0) {
@ -885,15 +892,14 @@ vbdev_zone_block_create(const char *bdev_name, const char *vbdev_name, uint64_t
return rc;
}
bdev = spdk_bdev_get_by_name(bdev_name);
if (!bdev) {
rc = zone_block_register(bdev_name);
if (rc == -ENODEV) {
/* This is not an error, even though the bdev is not present at this time it may
* still show up later.
*/
return 0;
rc = 0;
}
return zone_block_register(bdev);
return rc;
}
void
@ -921,7 +927,7 @@ vbdev_zone_block_delete(const char *name, spdk_bdev_unregister_cb cb_fn, void *c
static void
zone_block_examine(struct spdk_bdev *bdev)
{
zone_block_register(bdev);
zone_block_register(bdev->name);
spdk_bdev_module_examine_done(&bdev_zoned_if);
}