From 48820a5ef6b2fa1e72f10559438db86af84ac63d Mon Sep 17 00:00:00 2001 From: GangCao Date: Tue, 6 Dec 2016 18:52:26 -0500 Subject: [PATCH] nvme: check the IO qpair is on the list before removing Change-Id: Ic9706a51dcf65a848088448a3cfcdabd20f42f7d Signed-off-by: GangCao --- lib/nvme/nvme_ctrlr.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 1dace7ebf..a3346001e 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -113,12 +113,27 @@ nvme_ctrlr_proc_remove_io_qpair(struct spdk_nvme_qpair *qpair) { struct spdk_nvme_ctrlr_process *active_proc; struct spdk_nvme_ctrlr *ctrlr = qpair->ctrlr; + struct spdk_nvme_qpair *active_qpair, *tmp_qpair; pid_t pid = getpid(); + bool proc_found = false; TAILQ_FOREACH(active_proc, &ctrlr->active_procs, tailq) { if (active_proc->pid == pid) { - TAILQ_REMOVE(&active_proc->allocated_io_qpairs, qpair, - per_process_tailq); + proc_found = true; + break; + } + } + + if (proc_found == false) { + return; + } + + TAILQ_FOREACH_SAFE(active_qpair, &active_proc->allocated_io_qpairs, + per_process_tailq, tmp_qpair) { + if (active_qpair == qpair) { + TAILQ_REMOVE(&active_proc->allocated_io_qpairs, + active_qpair, per_process_tailq); + break; } }