From bfd1e46e6e3df32666b8bf843600d4ed822ae36b Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Wed, 3 Apr 2019 05:59:05 -0700 Subject: [PATCH] bdev: deprecate spdk_vbdev_register This API had good intentions, but as more complicated use cases came up where base bdevs could come and go, we've realized that the bdev layer will need another mechanism to query bdev modules on these types of relationships between a virtual bdev and its base bdevs. We removed all code related to tracking the array of base bdevs a long time ago. Change all existing callers to use spdk_bdev_register. Document spdk_vbdev_register as deprecated for now, and change its implementation to just call spdk_bdev_register for simplicity sake. Signed-off-by: Jim Harris Change-Id: I3b40ed96480c0fa7184db42953a9f4e4c167fed1 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/450076 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Changpeng Liu Reviewed-by: Shuhei Matsumoto --- CHANGELOG.md | 3 +++ include/spdk/bdev_module.h | 4 ++++ lib/bdev/bdev.c | 12 ++--------- lib/bdev/compress/vbdev_compress.c | 8 +++---- lib/bdev/crypto/vbdev_crypto.c | 8 +++---- lib/bdev/lvol/vbdev_lvol.c | 2 +- lib/bdev/part.c | 2 +- lib/bdev/passthru/vbdev_passthru.c | 2 +- test/unit/lib/bdev/bdev.c/bdev_ut.c | 21 +++++++------------ test/unit/lib/bdev/compress.c/compress_ut.c | 3 +-- test/unit/lib/bdev/crypto.c/crypto_ut.c | 3 +-- .../lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c | 2 +- 12 files changed, 30 insertions(+), 40 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b705a868..b23080cf2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,9 @@ to be performed on the thread at given time. An new API `spdk_bdev_get_data_block_size` has been added to get size of data block except for metadata. +spdk_vbdev_register() has been deprecated. spdk_bdev_register() should be used +instead. + ### NVMe-oF Target Support for per-device shared receive queues in the RDMA transport has been added. diff --git a/include/spdk/bdev_module.h b/include/spdk/bdev_module.h index 79b06b65a..a69734895 100644 --- a/include/spdk/bdev_module.h +++ b/include/spdk/bdev_module.h @@ -603,6 +603,10 @@ void spdk_bdev_destruct_done(struct spdk_bdev *bdev, int bdeverrno); /** * Register a virtual bdev. * + * This function is deprecated. Users should call spdk_bdev_register instead. + * The bdev layer currently makes no use of the base_bdevs array, so switching + * to spdk_bdev_register results in no loss of functionality. + * * \param vbdev Virtual bdev to register. * \param base_bdevs Array of bdevs upon which this vbdev is based. * \param base_bdev_count Number of bdevs in base_bdevs. diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index e02cf4c56..8bb758463 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -3758,16 +3758,8 @@ spdk_bdev_register(struct spdk_bdev *bdev) int spdk_vbdev_register(struct spdk_bdev *vbdev, struct spdk_bdev **base_bdevs, int base_bdev_count) { - int rc; - - rc = spdk_bdev_init(vbdev); - if (rc) { - return rc; - } - - spdk_bdev_start(vbdev); - spdk_notify_send("bdev_register", spdk_bdev_get_name(vbdev)); - return 0; + SPDK_ERRLOG("This function is deprecated. Use spdk_bdev_register() instead.\n"); + return spdk_bdev_register(vbdev); } void diff --git a/lib/bdev/compress/vbdev_compress.c b/lib/bdev/compress/vbdev_compress.c index 4f16322c7..8b2541416 100644 --- a/lib/bdev/compress/vbdev_compress.c +++ b/lib/bdev/compress/vbdev_compress.c @@ -1234,17 +1234,17 @@ vbdev_compress_claim(struct vbdev_compress *comp_bdev) goto error_claim; } - rc = spdk_vbdev_register(&comp_bdev->comp_bdev, &comp_bdev->base_bdev, 1); + rc = spdk_bdev_register(&comp_bdev->comp_bdev); if (rc < 0) { - SPDK_ERRLOG("trying to register vbdev\n"); - goto error_vbdev_register; + SPDK_ERRLOG("trying to register bdev\n"); + goto error_bdev_register; } SPDK_NOTICELOG("registered io_device and virtual bdev for: %s\n", comp_bdev->comp_bdev.name); return; /* Error cleanup paths. */ -error_vbdev_register: +error_bdev_register: spdk_bdev_module_release_bdev(comp_bdev->base_bdev); error_claim: TAILQ_REMOVE(&g_vbdev_comp, comp_bdev, link); diff --git a/lib/bdev/crypto/vbdev_crypto.c b/lib/bdev/crypto/vbdev_crypto.c index 87737347e..1e6b2343e 100644 --- a/lib/bdev/crypto/vbdev_crypto.c +++ b/lib/bdev/crypto/vbdev_crypto.c @@ -1605,11 +1605,11 @@ vbdev_crypto_claim(struct spdk_bdev *bdev) goto error_session_init; } - rc = spdk_vbdev_register(&vbdev->crypto_bdev, &vbdev->base_bdev, 1); + rc = spdk_bdev_register(&vbdev->crypto_bdev); if (rc < 0) { - SPDK_ERRLOG("ERROR trying to register vbdev\n"); + SPDK_ERRLOG("ERROR trying to register bdev\n"); rc = -EINVAL; - goto error_vbdev_register; + goto error_bdev_register; } SPDK_DEBUGLOG(SPDK_LOG_VBDEV_crypto, "registered io_device and virtual bdev for: %s\n", name->vbdev_name); @@ -1619,7 +1619,7 @@ vbdev_crypto_claim(struct spdk_bdev *bdev) return rc; /* Error cleanup paths. */ -error_vbdev_register: +error_bdev_register: error_session_init: rte_cryptodev_sym_session_free(vbdev->session_decrypt); error_session_de_create: diff --git a/lib/bdev/lvol/vbdev_lvol.c b/lib/bdev/lvol/vbdev_lvol.c index f41c5da7a..9793a5b1e 100644 --- a/lib/bdev/lvol/vbdev_lvol.c +++ b/lib/bdev/lvol/vbdev_lvol.c @@ -967,7 +967,7 @@ _create_lvol_disk(struct spdk_lvol *lvol, bool destroy) bdev->fn_table = &vbdev_lvol_fn_table; bdev->module = &g_lvol_if; - rc = spdk_vbdev_register(bdev, &lvs_bdev->bdev, 1); + rc = spdk_bdev_register(bdev); if (rc) { free(bdev); return rc; diff --git a/lib/bdev/part.c b/lib/bdev/part.c index 99fd368a3..5ee06ac7c 100644 --- a/lib/bdev/part.c +++ b/lib/bdev/part.c @@ -367,7 +367,7 @@ spdk_bdev_part_construct(struct spdk_bdev_part *part, struct spdk_bdev_part_base base->channel_size, name); - spdk_vbdev_register(&part->internal.bdev, &base->bdev, 1); + spdk_bdev_register(&part->internal.bdev); TAILQ_INSERT_TAIL(base->tailq, part, tailq); return 0; diff --git a/lib/bdev/passthru/vbdev_passthru.c b/lib/bdev/passthru/vbdev_passthru.c index f97810d49..47e4ccc0a 100644 --- a/lib/bdev/passthru/vbdev_passthru.c +++ b/lib/bdev/passthru/vbdev_passthru.c @@ -630,7 +630,7 @@ vbdev_passthru_register(struct spdk_bdev *bdev) } SPDK_NOTICELOG("bdev claimed\n"); - rc = spdk_vbdev_register(&pt_node->pt_bdev, &bdev, 1); + rc = spdk_bdev_register(&pt_node->pt_bdev); if (rc) { SPDK_ERRLOG("could not register pt_bdev\n"); spdk_bdev_close(pt_node->base_desc); diff --git a/test/unit/lib/bdev/bdev.c/bdev_ut.c b/test/unit/lib/bdev/bdev.c/bdev_ut.c index ff52a05dc..dcdd90296 100644 --- a/test/unit/lib/bdev/bdev.c/bdev_ut.c +++ b/test/unit/lib/bdev/bdev.c/bdev_ut.c @@ -330,10 +330,9 @@ allocate_bdev(char *name) } static struct spdk_bdev * -allocate_vbdev(char *name, struct spdk_bdev *base1, struct spdk_bdev *base2) +allocate_vbdev(char *name) { struct spdk_bdev *bdev; - struct spdk_bdev *array[2]; int rc; bdev = calloc(1, sizeof(*bdev)); @@ -343,13 +342,7 @@ allocate_vbdev(char *name, struct spdk_bdev *base1, struct spdk_bdev *base2) bdev->fn_table = &fn_table; bdev->module = &vbdev_ut_if; - /* vbdev must have at least one base bdev */ - CU_ASSERT(base1 != NULL); - - array[0] = base1; - array[1] = base2; - - rc = spdk_vbdev_register(bdev, array, base2 == NULL ? 1 : 2); + rc = spdk_bdev_register(bdev); CU_ASSERT(rc == 0); return bdev; @@ -464,19 +457,19 @@ open_write_test(void) rc = spdk_bdev_module_claim_bdev(bdev[3], NULL, &bdev_ut_if); CU_ASSERT(rc == 0); - bdev[4] = allocate_vbdev("bdev4", bdev[0], bdev[1]); + bdev[4] = allocate_vbdev("bdev4"); rc = spdk_bdev_module_claim_bdev(bdev[4], NULL, &bdev_ut_if); CU_ASSERT(rc == 0); - bdev[5] = allocate_vbdev("bdev5", bdev[2], NULL); + bdev[5] = allocate_vbdev("bdev5"); rc = spdk_bdev_module_claim_bdev(bdev[5], NULL, &bdev_ut_if); CU_ASSERT(rc == 0); - bdev[6] = allocate_vbdev("bdev6", bdev[2], NULL); + bdev[6] = allocate_vbdev("bdev6"); - bdev[7] = allocate_vbdev("bdev7", bdev[2], bdev[3]); + bdev[7] = allocate_vbdev("bdev7"); - bdev[8] = allocate_vbdev("bdev8", bdev[4], bdev[5]); + bdev[8] = allocate_vbdev("bdev8"); /* Open bdev0 read-only. This should succeed. */ rc = spdk_bdev_open(bdev[0], false, NULL, NULL, &desc[0]); diff --git a/test/unit/lib/bdev/compress.c/compress_ut.c b/test/unit/lib/bdev/compress.c/compress_ut.c index b3037664d..970c4828d 100644 --- a/test/unit/lib/bdev/compress.c/compress_ut.c +++ b/test/unit/lib/bdev/compress.c/compress_ut.c @@ -129,8 +129,7 @@ DEFINE_STUB(spdk_bdev_open, int, (struct spdk_bdev *bdev, bool write, DEFINE_STUB(spdk_bdev_module_claim_bdev, int, (struct spdk_bdev *bdev, struct spdk_bdev_desc *desc, struct spdk_bdev_module *module), 0); DEFINE_STUB_V(spdk_bdev_module_examine_done, (struct spdk_bdev_module *module)); -DEFINE_STUB(spdk_vbdev_register, int, (struct spdk_bdev *vbdev, struct spdk_bdev **base_bdevs, - int base_bdev_count), 0); +DEFINE_STUB(spdk_bdev_register, int, (struct spdk_bdev *bdev), 0); DEFINE_STUB(spdk_bdev_get_by_name, struct spdk_bdev *, (const char *bdev_name), NULL); DEFINE_STUB(spdk_env_get_socket_id, uint32_t, (uint32_t core), 0); DEFINE_STUB_V(spdk_reduce_vol_readv, (struct spdk_reduce_vol *vol, diff --git a/test/unit/lib/bdev/crypto.c/crypto_ut.c b/test/unit/lib/bdev/crypto.c/crypto_ut.c index a5a9dd96f..c0674077c 100644 --- a/test/unit/lib/bdev/crypto.c/crypto_ut.c +++ b/test/unit/lib/bdev/crypto.c/crypto_ut.c @@ -162,8 +162,7 @@ DEFINE_STUB(spdk_bdev_open, int, (struct spdk_bdev *bdev, bool write, DEFINE_STUB(spdk_bdev_module_claim_bdev, int, (struct spdk_bdev *bdev, struct spdk_bdev_desc *desc, struct spdk_bdev_module *module), 0); DEFINE_STUB_V(spdk_bdev_module_examine_done, (struct spdk_bdev_module *module)); -DEFINE_STUB(spdk_vbdev_register, int, (struct spdk_bdev *vbdev, struct spdk_bdev **base_bdevs, - int base_bdev_count), 0); +DEFINE_STUB(spdk_bdev_register, int, (struct spdk_bdev *vbdev), 0); DEFINE_STUB(spdk_env_get_socket_id, uint32_t, (uint32_t core), 0); /* DPDK stubs */ diff --git a/test/unit/lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c b/test/unit/lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c index 30af336e0..4811d8147 100644 --- a/test/unit/lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c +++ b/test/unit/lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c @@ -550,7 +550,7 @@ spdk_bdev_get_name(const struct spdk_bdev *bdev) } int -spdk_vbdev_register(struct spdk_bdev *vbdev, struct spdk_bdev **base_bdevs, int base_bdev_count) +spdk_bdev_register(struct spdk_bdev *vbdev) { TAILQ_INIT(&vbdev->aliases);