diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 5ceb81446..efbe09b2d 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -611,6 +611,8 @@ spdk_nvme_ctrlr_free_io_qpair(struct spdk_nvme_qpair *qpair) spdk_nvme_poll_group_remove(qpair->poll_group->group, qpair); } + nvme_transport_ctrlr_disconnect_qpair(ctrlr, qpair); + /* Do not retry. */ nvme_qpair_set_state(qpair, NVME_QPAIR_DESTROYING); diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index dcefe1337..ba70bc25b 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -1853,7 +1853,7 @@ nvme_rdma_ctrlr_delete_io_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_ assert(qpair != NULL); rqpair = nvme_rdma_qpair(qpair); - nvme_transport_ctrlr_disconnect_qpair(ctrlr, qpair); + if (rqpair->defer_deletion_to_pg) { nvme_qpair_set_state(qpair, NVME_QPAIR_DESTROYING); return 0; diff --git a/lib/nvme/nvme_tcp.c b/lib/nvme/nvme_tcp.c index 962289399..6ddeed41e 100644 --- a/lib/nvme/nvme_tcp.c +++ b/lib/nvme/nvme_tcp.c @@ -350,7 +350,6 @@ nvme_tcp_ctrlr_delete_io_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_q struct nvme_tcp_qpair *tqpair; assert(qpair != NULL); - nvme_transport_ctrlr_disconnect_qpair(ctrlr, qpair); nvme_tcp_qpair_abort_reqs(qpair, 1); nvme_qpair_deinit(qpair); tqpair = nvme_tcp_qpair(qpair);