diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index b7e3822dd..47fb8652c 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -295,7 +295,6 @@ int spdk_nvme_ctrlr_free_io_qpair(struct spdk_nvme_qpair *qpair) { struct spdk_nvme_ctrlr *ctrlr; - void *req_buf; if (qpair == NULL) { return 0; @@ -321,15 +320,11 @@ spdk_nvme_ctrlr_free_io_qpair(struct spdk_nvme_qpair *qpair) TAILQ_REMOVE(&ctrlr->active_io_qpairs, qpair, tailq); spdk_bit_array_set(ctrlr->free_io_qids, qpair->id); - req_buf = qpair->req_buf; - if (nvme_transport_ctrlr_delete_io_qpair(ctrlr, qpair)) { nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock); return -1; } - spdk_dma_free(req_buf); - nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock); return 0; } diff --git a/lib/nvme/nvme_internal.h b/lib/nvme/nvme_internal.h index 81e4bfce1..fb9eeb340 100644 --- a/lib/nvme/nvme_internal.h +++ b/lib/nvme/nvme_internal.h @@ -647,6 +647,7 @@ int nvme_qpair_init(struct spdk_nvme_qpair *qpair, uint16_t id, struct spdk_nvme_ctrlr *ctrlr, enum spdk_nvme_qprio qprio, uint32_t num_requests); +void nvme_qpair_deinit(struct spdk_nvme_qpair *qpair); void nvme_qpair_enable(struct spdk_nvme_qpair *qpair); void nvme_qpair_disable(struct spdk_nvme_qpair *qpair); int nvme_qpair_submit_request(struct spdk_nvme_qpair *qpair, diff --git a/lib/nvme/nvme_pcie.c b/lib/nvme/nvme_pcie.c index 327242db1..83a67be6b 100644 --- a/lib/nvme/nvme_pcie.c +++ b/lib/nvme/nvme_pcie.c @@ -1336,6 +1336,8 @@ nvme_pcie_qpair_destroy(struct spdk_nvme_qpair *qpair) spdk_dma_free(pqpair->tr); } + nvme_qpair_deinit(qpair); + spdk_dma_free(pqpair); return 0; diff --git a/lib/nvme/nvme_qpair.c b/lib/nvme/nvme_qpair.c index 45f605cee..af99ca8da 100644 --- a/lib/nvme/nvme_qpair.c +++ b/lib/nvme/nvme_qpair.c @@ -412,6 +412,12 @@ nvme_qpair_init(struct spdk_nvme_qpair *qpair, uint16_t id, return 0; } +void +nvme_qpair_deinit(struct spdk_nvme_qpair *qpair) +{ + spdk_dma_free(qpair->req_buf); +} + int nvme_qpair_submit_request(struct spdk_nvme_qpair *qpair, struct nvme_request *req) { diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index a6299bd56..e36f3ce4c 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -1110,6 +1110,7 @@ nvme_rdma_qpair_destroy(struct spdk_nvme_qpair *qpair) if (!qpair) { return -1; } + nvme_qpair_deinit(qpair); rqpair = nvme_rdma_qpair(qpair); diff --git a/test/unit/lib/nvme/nvme_pcie.c/nvme_pcie_ut.c b/test/unit/lib/nvme/nvme_pcie.c/nvme_pcie_ut.c index 41919ffa3..b5a5d7097 100644 --- a/test/unit/lib/nvme/nvme_pcie.c/nvme_pcie_ut.c +++ b/test/unit/lib/nvme/nvme_pcie.c/nvme_pcie_ut.c @@ -115,6 +115,12 @@ nvme_qpair_init(struct spdk_nvme_qpair *qpair, uint16_t id, abort(); } +void +nvme_qpair_deinit(struct spdk_nvme_qpair *qpair) +{ + abort(); +} + int spdk_pci_nvme_enumerate(spdk_pci_enum_cb enum_cb, void *enum_ctx) {