From 21bbcf7320ff229e1cad1016813b6101fbae31f9 Mon Sep 17 00:00:00 2001 From: Alexey Marchuk Date: Thu, 27 Jan 2022 15:38:20 +0300 Subject: [PATCH] nvmf: Stop all listeners when destroying transport When subsystem is destroyed, it removes its listeners, however transport level listeners remain active. This patch removes all transport listerners when the transport is being destroyed. Fixes issue 2353/ Signed-off-by: Alexey Marchuk Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11307 (master) (cherry picked from commit 29d94b7f018f0f0832c5f961a97ccd4b93539b1b) Change-Id: Ica7bcb0052b626aa62d0da9049bb8f216027dc49 Signed-off-by: Tomasz Zawadzki Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11314 Reviewed-by: Konrad Sztyber Reviewed-by: Jim Harris Reviewed-by: Aleksey Marchuk Tested-by: SPDK CI Jenkins --- lib/nvmf/transport.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/nvmf/transport.c b/lib/nvmf/transport.c index 578f0d4aa..2cb389d95 100644 --- a/lib/nvmf/transport.c +++ b/lib/nvmf/transport.c @@ -284,6 +284,8 @@ int spdk_nvmf_transport_destroy(struct spdk_nvmf_transport *transport, spdk_nvmf_transport_destroy_done_cb cb_fn, void *cb_arg) { + struct spdk_nvmf_listener *listener, *listener_tmp; + if (transport->data_buf_pool != NULL) { if (spdk_mempool_count(transport->data_buf_pool) != transport->opts.num_shared_buffers) { @@ -294,6 +296,12 @@ spdk_nvmf_transport_destroy(struct spdk_nvmf_transport *transport, spdk_mempool_free(transport->data_buf_pool); } + TAILQ_FOREACH_SAFE(listener, &transport->listeners, link, listener_tmp) { + TAILQ_REMOVE(&transport->listeners, listener, link); + transport->ops->stop_listen(transport, &listener->trid); + free(listener); + } + return transport->ops->destroy(transport, cb_fn, cb_arg); }