diff --git a/include/spdk/bdev_module.h b/include/spdk/bdev_module.h index aa1c4f5ba..46f2cbdea 100644 --- a/include/spdk/bdev_module.h +++ b/include/spdk/bdev_module.h @@ -724,15 +724,6 @@ struct bdev_part_tailq *spdk_bdev_part_base_get_tailq(struct spdk_bdev_part_base */ void *spdk_bdev_part_base_get_ctx(struct spdk_bdev_part_base *part_base); -/** - * Returns the reference number associated with an spdk_bdev_part_base - * - * \param part_base A pointer to an spdk_bdev_part_base object. - * - * \return The base's reference number. - */ -uint32_t spdk_bdev_part_base_get_ref(struct spdk_bdev_part_base *part_base); - typedef void (*spdk_bdev_part_base_free_fn)(void *ctx); struct spdk_bdev_part { diff --git a/lib/bdev/gpt/vbdev_gpt.c b/lib/bdev/gpt/vbdev_gpt.c index 468a8f643..28c81b378 100644 --- a/lib/bdev/gpt/vbdev_gpt.c +++ b/lib/bdev/gpt/vbdev_gpt.c @@ -228,6 +228,7 @@ vbdev_gpt_create_bdevs(struct gpt_base *gpt_base) { uint32_t num_partition_entries; uint64_t i, head_lba_start, head_lba_end; + uint32_t num_partitions; struct spdk_gpt_partition_entry *p; struct gpt_disk *d; struct spdk_gpt *gpt; @@ -239,6 +240,7 @@ vbdev_gpt_create_bdevs(struct gpt_base *gpt_base) num_partition_entries = from_le32(&gpt->header->num_partition_entries); head_lba_start = from_le64(&gpt->header->first_usable_lba); head_lba_end = from_le64(&gpt->header->last_usable_lba); + num_partitions = 0; for (i = 0; i < num_partition_entries; i++) { p = &gpt->partitions[i]; @@ -277,11 +279,11 @@ vbdev_gpt_create_bdevs(struct gpt_base *gpt_base) free(d); return -1; } - + num_partitions++; d->partition_index = i; } - return 0; + return num_partitions; } static void @@ -289,8 +291,7 @@ spdk_gpt_bdev_complete(struct spdk_bdev_io *bdev_io, bool status, void *arg) { struct gpt_base *gpt_base = (struct gpt_base *)arg; struct spdk_bdev *bdev = spdk_bdev_part_base_get_bdev(gpt_base->part_base); - uint32_t part_base_ref; - int rc; + int rc, num_partitions = 0; spdk_bdev_free_io(bdev_io); spdk_put_io_channel(gpt_base->ch); @@ -308,8 +309,8 @@ spdk_gpt_bdev_complete(struct spdk_bdev_io *bdev_io, bool status, void *arg) goto end; } - rc = vbdev_gpt_create_bdevs(gpt_base); - if (rc < 0) { + num_partitions = vbdev_gpt_create_bdevs(gpt_base); + if (num_partitions < 0) { SPDK_DEBUGLOG(SPDK_LOG_VBDEV_GPT, "Failed to split dev=%s by gpt table\n", spdk_bdev_get_name(bdev)); } @@ -320,9 +321,12 @@ end: * callback are now completed. */ spdk_bdev_module_examine_done(&gpt_if); - part_base_ref = spdk_bdev_part_base_get_ref(gpt_base->part_base); - if (part_base_ref == 0) { + /* + * vbdev_gpt_create_bdevs returns the number of bdevs created upon success. + * We can branch on this value. + */ + if (num_partitions <= 0) { /* If no gpt_disk instances were created, free the base context */ spdk_bdev_part_base_free(gpt_base->part_base); } diff --git a/lib/bdev/part.c b/lib/bdev/part.c index 29c4a97d8..cd47faa37 100644 --- a/lib/bdev/part.c +++ b/lib/bdev/part.c @@ -79,12 +79,6 @@ spdk_bdev_part_base_get_ctx(struct spdk_bdev_part_base *part_base) return part_base->ctx; } -uint32_t -spdk_bdev_part_base_get_ref(struct spdk_bdev_part_base *part_base) -{ - return part_base->ref; -} - void spdk_bdev_part_base_free(struct spdk_bdev_part_base *base) { diff --git a/lib/bdev/split/vbdev_split.c b/lib/bdev/split/vbdev_split.c index ef6f2a317..e4fadeb1e 100644 --- a/lib/bdev/split/vbdev_split.c +++ b/lib/bdev/split/vbdev_split.c @@ -263,7 +263,7 @@ vbdev_split_destruct_config(struct spdk_vbdev_split_config *cfg) struct bdev_part_tailq *split_base_tailq; cfg->removed = true; - if (cfg->split_base != NULL && spdk_bdev_part_base_get_ref(cfg->split_base)) { + if (cfg->split_base != NULL) { split_base_bdev = spdk_bdev_part_base_get_bdev(cfg->split_base); split_base_tailq = spdk_bdev_part_base_get_tailq(cfg->split_base); spdk_bdev_part_base_hotremove(split_base_bdev, split_base_tailq); @@ -420,7 +420,7 @@ vbdev_split_examine(struct spdk_bdev *bdev) struct spdk_vbdev_split_config *cfg = vbdev_split_config_find_by_base_name(bdev->name); if (cfg != NULL && cfg->removed == false) { - assert(cfg->split_base == NULL || spdk_bdev_part_base_get_ref(cfg->split_base) == 0); + assert(cfg->split_base == NULL); if (vbdev_split_create(cfg)) { SPDK_ERRLOG("could not split bdev %s\n", bdev->name);