From fd892b333d197a2ebb4e8bdb265f320f7a4ebd6a Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Thu, 26 Sep 2019 15:58:55 -0700 Subject: [PATCH] nvme_ctrlr: when reconnecting admin queue, check rc. This was being ignored, and can cause some problems when trying to reset a defunt controller over a fabric. Change-Id: I32c11a0e2df0e140e20f870fe0fb5b9045a567b3 Signed-off-by: Seth Howell Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/469638 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/nvme/nvme_ctrlr.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 828421495..b717fd948 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -994,7 +994,12 @@ spdk_nvme_ctrlr_reset(struct spdk_nvme_ctrlr *ctrlr) nvme_qpair_complete_error_reqs(ctrlr->adminq); nvme_transport_qpair_abort_reqs(ctrlr->adminq, 0 /* retry */); nvme_transport_ctrlr_disconnect_qpair(ctrlr, ctrlr->adminq); - nvme_transport_ctrlr_connect_qpair(ctrlr, ctrlr->adminq); + if (nvme_transport_ctrlr_connect_qpair(ctrlr, ctrlr->adminq) != 0) { + SPDK_ERRLOG("Controller reinitialization failed.\n"); + nvme_ctrlr_fail(ctrlr, false); + rc = -1; + goto out; + } /* Doorbell buffer config is invalid during reset */ nvme_ctrlr_free_doorbell_buffer(ctrlr); @@ -1021,6 +1026,7 @@ spdk_nvme_ctrlr_reset(struct spdk_nvme_ctrlr *ctrlr) } } +out: ctrlr->is_resetting = false; nvme_robust_mutex_unlock(&ctrlr->ctrlr_lock);