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 <alexeymar@mellanox.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11307 (master)
(cherry picked from commit 29d94b7f01
)
Change-Id: Ica7bcb0052b626aa62d0da9049bb8f216027dc49
Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11314
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
4859d56191
commit
21bbcf7320
@ -284,6 +284,8 @@ int
|
|||||||
spdk_nvmf_transport_destroy(struct spdk_nvmf_transport *transport,
|
spdk_nvmf_transport_destroy(struct spdk_nvmf_transport *transport,
|
||||||
spdk_nvmf_transport_destroy_done_cb cb_fn, void *cb_arg)
|
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 (transport->data_buf_pool != NULL) {
|
||||||
if (spdk_mempool_count(transport->data_buf_pool) !=
|
if (spdk_mempool_count(transport->data_buf_pool) !=
|
||||||
transport->opts.num_shared_buffers) {
|
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);
|
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);
|
return transport->ops->destroy(transport, cb_fn, cb_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user