From c9b18a9f3f153a973ce4b9e468335304b76e618c Mon Sep 17 00:00:00 2001 From: Cunyin Chang Date: Fri, 1 Dec 2017 11:06:48 +0800 Subject: [PATCH] bdev/nvme: optimization of the process when destruct the nvme bdev. This patch will make sure the nvme bdev work in correct way when we delete bdev by using rpc method and then exit the app. Change-Id: I19172440d46d96c7396282e1bef07d98ab601390 Signed-off-by: Cunyin Chang Reviewed-on: https://review.gerrithub.io/389930 Tested-by: SPDK Automated Test System Reviewed-by: Daniel Verkamp Reviewed-by: Ben Walker Reviewed-by: Jim Harris Reviewed-by: Dariusz Stojaczyk --- lib/bdev/nvme/bdev_nvme.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/lib/bdev/nvme/bdev_nvme.c b/lib/bdev/nvme/bdev_nvme.c index 26457589b..958c1c23d 100644 --- a/lib/bdev/nvme/bdev_nvme.c +++ b/lib/bdev/nvme/bdev_nvme.c @@ -242,6 +242,7 @@ bdev_nvme_destruct(void *ctx) struct nvme_ctrlr *nvme_ctrlr = nvme_disk->nvme_ctrlr; pthread_mutex_lock(&g_bdev_nvme_mutex); + TAILQ_REMOVE(&g_nvme_bdevs, nvme_disk, link); nvme_ctrlr->ref--; free(nvme_disk->disk.name); free(nvme_disk); @@ -886,22 +887,16 @@ static void remove_cb(void *cb_ctx, struct spdk_nvme_ctrlr *ctrlr) { struct nvme_bdev *nvme_bdev, *btmp; - TAILQ_HEAD(, nvme_bdev) removed_bdevs; - TAILQ_INIT(&removed_bdevs); pthread_mutex_lock(&g_bdev_nvme_mutex); TAILQ_FOREACH_SAFE(nvme_bdev, &g_nvme_bdevs, link, btmp) { if (nvme_bdev->nvme_ctrlr->ctrlr == ctrlr) { - TAILQ_REMOVE(&g_nvme_bdevs, nvme_bdev, link); - TAILQ_INSERT_TAIL(&removed_bdevs, nvme_bdev, link); + pthread_mutex_unlock(&g_bdev_nvme_mutex); + spdk_bdev_unregister(&nvme_bdev->disk, NULL, NULL); + pthread_mutex_lock(&g_bdev_nvme_mutex); } } pthread_mutex_unlock(&g_bdev_nvme_mutex); - - TAILQ_FOREACH_SAFE(nvme_bdev, &removed_bdevs, link, btmp) { - TAILQ_REMOVE(&removed_bdevs, nvme_bdev, link); - spdk_bdev_unregister(&nvme_bdev->disk, NULL, NULL); - } } static void @@ -1119,7 +1114,6 @@ bdev_nvme_library_fini(void) } TAILQ_FOREACH_SAFE(nvme_bdev, &g_nvme_bdevs, link, btmp) { - TAILQ_REMOVE(&g_nvme_bdevs, nvme_bdev, link); spdk_bdev_unregister(&nvme_bdev->disk, NULL, NULL); } }