From 9fd2f931cd6dc4aec0b82be6bc6da428d13f455f Mon Sep 17 00:00:00 2001 From: Mike Gerdts Date: Mon, 24 Oct 2022 10:16:53 -0500 Subject: [PATCH] bdev: claim_module becomes claim.v1.module In preparation for an updated claims API, refactor bdev->internal.claim_module into a union that will eventually hold different information based on the the type of claim. Change-Id: I7ade6f03128bdb0f8375a95ae953cb63d6aa686d Signed-off-by: Mike Gerdts Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15285 Tested-by: SPDK CI Jenkins Reviewed-by: Shuhei Matsumoto Reviewed-by: Jim Harris Community-CI: Mellanox Build Bot --- include/spdk/bdev_module.h | 17 +++++++---- lib/bdev/bdev.c | 28 +++++++++---------- lib/bdev/bdev_rpc.c | 2 +- test/unit/lib/bdev/bdev.c/bdev_ut.c | 9 +++--- .../lib/bdev/raid/bdev_raid.c/bdev_raid_ut.c | 8 +++--- .../vbdev_zone_block.c/vbdev_zone_block_ut.c | 8 +++--- 6 files changed, 39 insertions(+), 33 deletions(-) diff --git a/include/spdk/bdev_module.h b/include/spdk/bdev_module.h index 5831ff989..fcec8a7e0 100644 --- a/include/spdk/bdev_module.h +++ b/include/spdk/bdev_module.h @@ -522,12 +522,17 @@ struct spdk_bdev { /** The bdev status */ enum spdk_bdev_status status; - /** - * Pointer to the module that has claimed this bdev for purposes of creating virtual - * bdevs on top of it. Set to NULL if the bdev has not been claimed. Must hold - * spinlock on all updates. - */ - struct spdk_bdev_module *claim_module; + /** Which module has claimed this bdev. Must hold spinlock on all updates. */ + union __bdev_internal_claim { + struct __bdev_internal_claim_v1 { + /** + * Pointer to the module that has claimed this bdev for purposes of + * creating virtual bdevs on top of it. Set to NULL if the bdev has + * not been claimed. + */ + struct spdk_bdev_module *module; + } v1; + } claim; /** Callback function that will be called after bdev destruct is completed. */ spdk_bdev_unregister_cb unregister_cb; diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 1bf922e71..83bc61395 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -658,13 +658,13 @@ bdev_examine(struct spdk_bdev *bdev) spdk_spin_unlock(&module->internal.spinlock); module->examine_config(bdev); if (action != module->internal.action_in_progress) { - SPDK_ERRLOG("examine_config for module %s did not call spdk_bdev_module_examine_done()\n", - module->name); + SPDK_ERRLOG("examine_config for module %s did not call " + "spdk_bdev_module_examine_done()\n", module->name); } } } - module = bdev->internal.claim_module; + module = bdev->internal.claim.v1.module; if (module != NULL) { if (module->examine_disk) { spdk_spin_lock(&module->internal.spinlock); @@ -767,7 +767,7 @@ static struct spdk_bdev * _bdev_next_leaf(struct spdk_bdev *bdev) { while (bdev != NULL) { - if (bdev->internal.claim_module == NULL) { + if (bdev->internal.claim.v1.module == NULL) { return bdev; } else { bdev = TAILQ_NEXT(bdev, internal.link); @@ -1823,9 +1823,9 @@ bdev_finish_unregister_bdevs_iter(void *cb_arg, int bdeverrno) for (bdev = TAILQ_LAST(&g_bdev_mgr.bdevs, spdk_bdev_list); bdev; bdev = TAILQ_PREV(bdev, spdk_bdev_list, internal.link)) { spdk_spin_lock(&bdev->internal.spinlock); - if (bdev->internal.claim_module != NULL) { + if (bdev->internal.claim.v1.module != NULL) { SPDK_DEBUGLOG(bdev, "Skipping claimed bdev '%s'(<-'%s').\n", - bdev->name, bdev->internal.claim_module->name); + bdev->name, bdev->internal.claim.v1.module->name); spdk_spin_unlock(&bdev->internal.spinlock); continue; } @@ -6724,7 +6724,7 @@ bdev_register(struct spdk_bdev *bdev) bdev->internal.status = SPDK_BDEV_STATUS_READY; bdev->internal.measured_queue_depth = UINT64_MAX; - bdev->internal.claim_module = NULL; + bdev->internal.claim.v1.module = NULL; bdev->internal.qd_poller = NULL; bdev->internal.qos = NULL; @@ -7056,9 +7056,9 @@ bdev_open(struct spdk_bdev *bdev, bool write, struct spdk_bdev_desc *desc) return -ENODEV; } - if (write && bdev->internal.claim_module) { + if (write && bdev->internal.claim.v1.module) { SPDK_ERRLOG("Could not open %s - %s module already claimed it\n", - bdev->name, bdev->internal.claim_module->name); + bdev->name, bdev->internal.claim.v1.module->name); spdk_spin_unlock(&bdev->internal.spinlock); return -EPERM; } @@ -7285,9 +7285,9 @@ spdk_bdev_module_claim_bdev(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc, { spdk_spin_lock(&bdev->internal.spinlock); - if (bdev->internal.claim_module != NULL) { + if (bdev->internal.claim.v1.module != NULL) { SPDK_ERRLOG("bdev %s already claimed by module %s\n", bdev->name, - bdev->internal.claim_module->name); + bdev->internal.claim.v1.module->name); spdk_spin_unlock(&bdev->internal.spinlock); return -EPERM; } @@ -7296,7 +7296,7 @@ spdk_bdev_module_claim_bdev(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc, desc->write = true; } - bdev->internal.claim_module = module; + bdev->internal.claim.v1.module = module; spdk_spin_unlock(&bdev->internal.spinlock); return 0; @@ -7307,8 +7307,8 @@ spdk_bdev_module_release_bdev(struct spdk_bdev *bdev) { spdk_spin_lock(&bdev->internal.spinlock); - assert(bdev->internal.claim_module != NULL); - bdev->internal.claim_module = NULL; + assert(bdev->internal.claim.v1.module != NULL); + bdev->internal.claim.v1.module = NULL; spdk_spin_unlock(&bdev->internal.spinlock); } diff --git a/lib/bdev/bdev_rpc.c b/lib/bdev/bdev_rpc.c index 3beaf52e9..3c265aca1 100644 --- a/lib/bdev/bdev_rpc.c +++ b/lib/bdev/bdev_rpc.c @@ -710,7 +710,7 @@ rpc_dump_bdev_info(void *ctx, struct spdk_bdev *bdev) } spdk_json_write_object_end(w); - spdk_json_write_named_bool(w, "claimed", (bdev->internal.claim_module != NULL)); + spdk_json_write_named_bool(w, "claimed", (bdev->internal.claim.v1.module != NULL)); spdk_json_write_named_bool(w, "zoned", bdev->zoned); if (bdev->zoned) { diff --git a/test/unit/lib/bdev/bdev.c/bdev_ut.c b/test/unit/lib/bdev/bdev.c/bdev_ut.c index 83a18b3e6..066b812d8 100644 --- a/test/unit/lib/bdev/bdev.c/bdev_ut.c +++ b/test/unit/lib/bdev/bdev.c/bdev_ut.c @@ -837,7 +837,7 @@ claim_test(void) rc = spdk_bdev_module_claim_bdev(bdev, NULL, &bdev_ut_if); CU_ASSERT(rc == 0); - CU_ASSERT(bdev->internal.claim_module == &bdev_ut_if); + CU_ASSERT(bdev->internal.claim.v1.module == &bdev_ut_if); /* There should be only one open descriptor and it should still be ro */ count = 0; @@ -852,7 +852,7 @@ claim_test(void) spdk_bdev_module_release_bdev(bdev); rc = spdk_bdev_module_claim_bdev(bdev, desc, &bdev_ut_if); CU_ASSERT(rc == 0); - CU_ASSERT(bdev->internal.claim_module == &bdev_ut_if); + CU_ASSERT(bdev->internal.claim.v1.module == &bdev_ut_if); /* There should be only one open descriptor and it should be rw */ count = 0; @@ -6241,7 +6241,7 @@ examine_locks(void) bdev = allocate_bdev_ctx("bdev0", &ctx); CU_ASSERT(ctx.examine_config_count == 1); CU_ASSERT(ctx.examine_disk_count == 1); - CU_ASSERT(bdev->internal.claim_module == NULL); + CU_ASSERT(bdev->internal.claim.v1.module == NULL); free_bdev(bdev); /* Exercise the other path that is taken when examine_config() takes a claim. */ @@ -6251,8 +6251,9 @@ examine_locks(void) bdev = allocate_bdev_ctx("bdev0", &ctx); CU_ASSERT(ctx.examine_config_count == 1); CU_ASSERT(ctx.examine_disk_count == 1); - CU_ASSERT(bdev->internal.claim_module == &vbdev_ut_if); + CU_ASSERT(bdev->internal.claim.v1.module == &vbdev_ut_if); spdk_bdev_module_release_bdev(bdev); + CU_ASSERT(bdev->internal.claim.v1.module == NULL); free_bdev(bdev); } diff --git a/test/unit/lib/bdev/raid/bdev_raid.c/bdev_raid_ut.c b/test/unit/lib/bdev/raid/bdev_raid.c/bdev_raid_ut.c index 92eef707f..2ac5d2c06 100644 --- a/test/unit/lib/bdev/raid/bdev_raid.c/bdev_raid_ut.c +++ b/test/unit/lib/bdev/raid/bdev_raid.c/bdev_raid_ut.c @@ -478,18 +478,18 @@ spdk_bdev_readv_blocks_ext(struct spdk_bdev_desc *desc, struct spdk_io_channel * void spdk_bdev_module_release_bdev(struct spdk_bdev *bdev) { - CU_ASSERT(bdev->internal.claim_module != NULL); - bdev->internal.claim_module = NULL; + CU_ASSERT(bdev->internal.claim.v1.module != NULL); + bdev->internal.claim.v1.module = NULL; } int spdk_bdev_module_claim_bdev(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc, struct spdk_bdev_module *module) { - if (bdev->internal.claim_module != NULL) { + if (bdev->internal.claim.v1.module != NULL) { return -1; } - bdev->internal.claim_module = module; + bdev->internal.claim.v1.module = module; return 0; } diff --git a/test/unit/lib/bdev/vbdev_zone_block.c/vbdev_zone_block_ut.c b/test/unit/lib/bdev/vbdev_zone_block.c/vbdev_zone_block_ut.c index 645848624..fcd580a71 100644 --- a/test/unit/lib/bdev/vbdev_zone_block.c/vbdev_zone_block_ut.c +++ b/test/unit/lib/bdev/vbdev_zone_block.c/vbdev_zone_block_ut.c @@ -184,18 +184,18 @@ int spdk_bdev_module_claim_bdev(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc, struct spdk_bdev_module *module) { - if (bdev->internal.claim_module != NULL) { + if (bdev->internal.claim.v1.module != NULL) { return -1; } - bdev->internal.claim_module = module; + bdev->internal.claim.v1.module = module; return 0; } void spdk_bdev_module_release_bdev(struct spdk_bdev *bdev) { - CU_ASSERT(bdev->internal.claim_module != NULL); - bdev->internal.claim_module = NULL; + CU_ASSERT(bdev->internal.claim.v1.module != NULL); + bdev->internal.claim.v1.module = NULL; } void