nvme: disconnect ADMIN queue pair when destruct controller

We should disconnect ADMIN queue pair after shutdown
returned, or we may leak ADMIN socket resources after
free the controller data structure.

Fix issue #2289.

Change-Id: I956191fcd51cdcef5de2c3c7b15ffc70f22b040b
Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11133
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Dong Yi <dongx.yi@intel.com>
Reviewed-by: <qun.wan@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
This commit is contained in:
Changpeng Liu 2022-01-18 15:40:54 +08:00 committed by Keith Lucas
parent 7c08459215
commit dd38a968d3

View File

@ -4181,6 +4181,8 @@ nvme_ctrlr_destruct_poll_async(struct spdk_nvme_ctrlr *ctrlr,
ctx->cb_fn(ctrlr); ctx->cb_fn(ctrlr);
} }
nvme_transport_ctrlr_disconnect_qpair(ctrlr, ctrlr->adminq);
RB_FOREACH_SAFE(ns, nvme_ns_tree, &ctrlr->ns, tmp_ns) { RB_FOREACH_SAFE(ns, nvme_ns_tree, &ctrlr->ns, tmp_ns) {
nvme_ctrlr_destruct_namespace(ctrlr, ns->id); nvme_ctrlr_destruct_namespace(ctrlr, ns->id);
RB_REMOVE(nvme_ns_tree, &ctrlr->ns, ns); RB_REMOVE(nvme_ns_tree, &ctrlr->ns, ns);