From 32ad027b0c1ecb8c6284c481bced4719633db1b7 Mon Sep 17 00:00:00 2001 From: Ziye Yang Date: Mon, 12 Feb 2018 16:58:31 +0800 Subject: [PATCH] nvmf: Adjust the resource free order for transport Reason: In spdk_nvmf_subsystem_destroy, we call spdk_nvmf_ctrlr_destruct(ctrlr), and this function will still use the transport, so definitely, it is a defect(reproduced in my platform). So we need to defer freeing the transport resource. Change-Id: I3eee2a29c223e2759a623604485af6f081746581 Signed-off-by: Ziye Yang Reviewed-on: https://review.gerrithub.io/399368 Tested-by: SPDK Automated Test System Reviewed-by: Daniel Verkamp Reviewed-by: Jim Harris --- lib/nvmf/nvmf.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/nvmf/nvmf.c b/lib/nvmf/nvmf.c index 76623c1d7..389a3752d 100644 --- a/lib/nvmf/nvmf.c +++ b/lib/nvmf/nvmf.c @@ -188,11 +188,6 @@ spdk_nvmf_tgt_destroy(struct spdk_nvmf_tgt *tgt) struct spdk_nvmf_transport *transport, *transport_tmp; uint32_t i; - TAILQ_FOREACH_SAFE(transport, &tgt->transports, link, transport_tmp) { - TAILQ_REMOVE(&tgt->transports, transport, link); - spdk_nvmf_transport_destroy(transport); - } - if (tgt->discovery_log_page) { free(tgt->discovery_log_page); } @@ -206,6 +201,11 @@ spdk_nvmf_tgt_destroy(struct spdk_nvmf_tgt *tgt) free(tgt->subsystems); } + TAILQ_FOREACH_SAFE(transport, &tgt->transports, link, transport_tmp) { + TAILQ_REMOVE(&tgt->transports, transport, link); + spdk_nvmf_transport_destroy(transport); + } + free(tgt); }