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