nvme: free IO qpair when cleaning up died process

Change-Id: I136945b6bed4d2cdb0ee54b27b224c2e9cec377f
Signed-off-by: GangCao <gang.cao@intel.com>
This commit is contained in:
GangCao 2016-12-06 18:00:48 -05:00 committed by Daniel Verkamp
parent 48820a5ef6
commit 52f3c2fa52

View File

@ -933,13 +933,15 @@ nvme_ctrlr_remove_process(struct spdk_nvme_ctrlr *ctrlr,
/** /**
* This function will be called when the process exited unexpectedly * This function will be called when the process exited unexpectedly
* in order to free any incomplete nvme request and allocated memory. * in order to free any incomplete nvme request, allocated IO qpairs
* and allocated memory.
* Note: the ctrlr_lock must be held when calling this function. * Note: the ctrlr_lock must be held when calling this function.
*/ */
static void static void
nvme_ctrlr_cleanup_process(struct spdk_nvme_ctrlr_process *proc) nvme_ctrlr_cleanup_process(struct spdk_nvme_ctrlr_process *proc)
{ {
struct nvme_request *req, *tmp_req; struct nvme_request *req, *tmp_req;
struct spdk_nvme_qpair *qpair, *tmp_qpair;
STAILQ_FOREACH_SAFE(req, &proc->active_reqs, stailq, tmp_req) { STAILQ_FOREACH_SAFE(req, &proc->active_reqs, stailq, tmp_req) {
STAILQ_REMOVE(&proc->active_reqs, req, nvme_request, stailq); STAILQ_REMOVE(&proc->active_reqs, req, nvme_request, stailq);
@ -949,6 +951,12 @@ nvme_ctrlr_cleanup_process(struct spdk_nvme_ctrlr_process *proc)
nvme_free_request(req); nvme_free_request(req);
} }
TAILQ_FOREACH_SAFE(qpair, &proc->allocated_io_qpairs, per_process_tailq, tmp_qpair) {
TAILQ_REMOVE(&proc->allocated_io_qpairs, qpair, per_process_tailq);
spdk_nvme_ctrlr_free_io_qpair(qpair);
}
spdk_free(proc); spdk_free(proc);
} }