From 963e450a7127eaad458ac6d5e4bf3fb164def7e1 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Thu, 9 May 2019 12:24:11 -0700 Subject: [PATCH] nvme: complete error reqs when re-enabling queue We cannot complete error reqs from spdk_nvme_ctrlr_reset - this could result in completions on threads not expected by the user for I/O queues. Signed-off-by: Jim Harris Change-Id: I2e266a2618f1791ef1a1b713d1940357f23f7bff Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/453932 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto Reviewed-by: Changpeng Liu --- lib/nvme/nvme_ctrlr.c | 6 +----- lib/nvme/nvme_qpair.c | 1 + 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index ab2f9598d..c9938e7e7 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -844,11 +844,6 @@ spdk_nvme_ctrlr_reset(struct spdk_nvme_ctrlr *ctrlr) nvme_transport_admin_qpair_abort_aers(ctrlr->adminq); - nvme_qpair_complete_error_reqs(ctrlr->adminq); - TAILQ_FOREACH(qpair, &ctrlr->active_io_qpairs, tailq) { - nvme_qpair_complete_error_reqs(qpair); - } - /* Disable all queues before disabling the controller hardware. */ nvme_qpair_disable(ctrlr->adminq); TAILQ_FOREACH(qpair, &ctrlr->active_io_qpairs, tailq) { @@ -1922,6 +1917,7 @@ static void nvme_ctrlr_enable_admin_queue(struct spdk_nvme_ctrlr *ctrlr) { nvme_transport_qpair_reset(ctrlr->adminq); + nvme_qpair_complete_error_reqs(ctrlr->adminq); nvme_qpair_enable(ctrlr->adminq); nvme_transport_qpair_abort_reqs(ctrlr->adminq, 0 /* retry */); } diff --git a/lib/nvme/nvme_qpair.c b/lib/nvme/nvme_qpair.c index 90a65d3c8..8530fdfac 100644 --- a/lib/nvme/nvme_qpair.c +++ b/lib/nvme/nvme_qpair.c @@ -405,6 +405,7 @@ static bool nvme_qpair_check_enabled(struct spdk_nvme_qpair *qpair) { if (!qpair->is_enabled && !qpair->ctrlr->is_resetting) { + nvme_qpair_complete_error_reqs(qpair); nvme_qpair_abort_queued_reqs(qpair, 0 /* retry */); nvme_qpair_enable(qpair); nvme_transport_qpair_abort_reqs(qpair, 0 /* retry */);