diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 2fdab705e..9a4837a2d 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -3362,7 +3362,9 @@ nvme_ctrlr_cleanup_process(struct spdk_nvme_ctrlr_process *proc) STAILQ_REMOVE(&proc->active_reqs, req, nvme_request, stailq); assert(req->pid == proc->pid); - + if (req->user_buffer && req->payload_size) { + spdk_free(req->payload.contig_or_cb_arg); + } nvme_free_request(req); } diff --git a/lib/nvme/nvme_pcie_common.c b/lib/nvme/nvme_pcie_common.c index c75155c2c..000636d51 100644 --- a/lib/nvme/nvme_pcie_common.c +++ b/lib/nvme/nvme_pcie_common.c @@ -291,7 +291,9 @@ nvme_pcie_qpair_insert_pending_admin_request(struct spdk_nvme_qpair *qpair, } else { SPDK_ERRLOG("The owning process (pid %d) is not found. Dropping the request.\n", active_req->pid); - + if (active_req->user_buffer && active_req->payload_size) { + spdk_free(active_req->payload.contig_or_cb_arg); + } nvme_free_request(active_req); } } diff --git a/lib/nvme/nvme_qpair.c b/lib/nvme/nvme_qpair.c index 68de0284f..43e8a40c0 100644 --- a/lib/nvme/nvme_qpair.c +++ b/lib/nvme/nvme_qpair.c @@ -1049,6 +1049,10 @@ error: return rc; } + if (req->user_buffer && req->payload_size) { + spdk_free(req->payload.contig_or_cb_arg); + } + nvme_free_request(req); return rc;