From 5f6306ea24974164d22a3a3c54952161e122dd98 Mon Sep 17 00:00:00 2001 From: Tomasz Zawadzki Date: Thu, 14 Sep 2017 16:35:23 +0200 Subject: [PATCH] bdev/gpt: free base bdev_part in gpt after examining Currently GPT keeps the bdev it is examining open, even after determining there is no GPT on it. It is due to spdk_gpt_base_free() not notifying bdev layer to free base bdev_part. Additionally release of bdev module for that bdev was moved to bdev_part_free, as the module is not claimed until bdev_part on base bdev are created. Functional tests added to verify the changes. Signed-off-by: Tomasz Zawadzki Change-Id: Id75f88259267847e8ec476d19750dc1e2690f11a Reviewed-on: https://review.gerrithub.io/378621 Tested-by: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Daniel Verkamp --- lib/bdev/bdev.c | 2 +- lib/bdev/gpt/vbdev_gpt.c | 1 + test/nvmf/discovery/discovery.sh | 9 +++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index a1674d22e..f6a35d800 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -1726,7 +1726,6 @@ spdk_bdev_part_base_free(struct spdk_bdev_part_base *base) { assert(base->bdev); assert(base->desc); - spdk_bdev_module_release_bdev(base->bdev); spdk_bdev_close(base->desc); free(base); } @@ -1746,6 +1745,7 @@ spdk_bdev_part_free(struct spdk_bdev_part *part) free(part); if (__sync_sub_and_fetch(&base->ref, 1) == 0) { + spdk_bdev_module_release_bdev(base->bdev); spdk_bdev_part_base_free(base); } } diff --git a/lib/bdev/gpt/vbdev_gpt.c b/lib/bdev/gpt/vbdev_gpt.c index 7fab01939..950fea55a 100644 --- a/lib/bdev/gpt/vbdev_gpt.c +++ b/lib/bdev/gpt/vbdev_gpt.c @@ -77,6 +77,7 @@ static bool g_gpt_disabled; static void spdk_gpt_base_free(struct gpt_base *gpt_base) { + spdk_bdev_part_base_free(&gpt_base->part_base); spdk_dma_free(gpt_base->gpt.buf); free(gpt_base); } diff --git a/test/nvmf/discovery/discovery.sh b/test/nvmf/discovery/discovery.sh index f8e828dcb..3e175f42b 100755 --- a/test/nvmf/discovery/discovery.sh +++ b/test/nvmf/discovery/discovery.sh @@ -49,6 +49,15 @@ $rpc_py get_nvmf_subsystems $rpc_py delete_nvmf_subsystem nqn.2016-06.io.spdk:cnode1 +$rpc_py delete_bdev Null1 +$rpc_py delete_bdev Null0 + +check_bdevs=$($rpc_py get_bdevs | jq -r '.[].name') +if [ -n "$check_bdevs" ]; then + echo $check_bdevs + exit 1 +fi + trap - SIGINT SIGTERM EXIT nvmfcleanup