From 640547c5c1ebe00f6ff3625ef9f47ffbeadbeed2 Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Wed, 20 Mar 2019 04:57:43 -0400 Subject: [PATCH] ftl: free allocated IO queue pair before releasing the controller Intermittent FTL test failure (ASAN) #717 reported an error, in ftl_halt_poller() call, ftl_anm_unregister_device() will release controller first, while in ftl_dev_free_sync() the IO queue pair will be released again. Change-Id: Ifac2aa68e66ee5f41eba80c11c61d9dc91ec3408 Signed-off-by: Changpeng Liu Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/448524 Tested-by: SPDK CI Jenkins Reviewed-by: Wojciech Malikowski Reviewed-by: Jim Harris Reviewed-by: Darek Stojaczyk --- lib/ftl/ftl_init.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ftl/ftl_init.c b/lib/ftl/ftl_init.c index 001c775b7..4e1c4f944 100644 --- a/lib/ftl/ftl_init.c +++ b/lib/ftl/ftl_init.c @@ -945,9 +945,6 @@ ftl_dev_free_sync(struct spdk_ftl_dev *dev) } pthread_mutex_unlock(&g_ftl_queue_lock); - ftl_dev_free_thread(dev, &dev->read_thread); - ftl_dev_free_thread(dev, &dev->core_thread); - assert(LIST_EMPTY(&dev->wptr_list)); ftl_dev_dump_bands(dev); @@ -985,6 +982,9 @@ ftl_halt_poller(void *ctx) if (!dev->core_thread.poller && !dev->read_thread.poller) { spdk_poller_unregister(&dev->halt_poller); + ftl_dev_free_thread(dev, &dev->read_thread); + ftl_dev_free_thread(dev, &dev->core_thread); + ftl_anm_unregister_device(dev); ftl_dev_free_sync(dev);