From c9bc86c061529b76ffe433acc1f9475c879bd0a7 Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Wed, 15 Jul 2020 10:26:06 -0700 Subject: [PATCH] lib/nvme: add checks for new states in reconnect_io_qpair. This function hasn't kept up properly with the states that we use for tracking the qpair lifecycle. Add checks for NVME_QPAIR_DISCONNECTING and NVME_QPAIR_DESTROYING. Signed-off-by: Seth Howell Change-Id: I51607d4f00e94937b08fca28e766163580d46461 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3359 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Shuhei Matsumoto --- lib/nvme/nvme_ctrlr.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/nvme/nvme_ctrlr.c b/lib/nvme/nvme_ctrlr.c index 3ee17a23d..5d8b519e6 100644 --- a/lib/nvme/nvme_ctrlr.c +++ b/lib/nvme/nvme_ctrlr.c @@ -463,6 +463,7 @@ int spdk_nvme_ctrlr_reconnect_io_qpair(struct spdk_nvme_qpair *qpair) { struct spdk_nvme_ctrlr *ctrlr; + enum nvme_qpair_state qpair_state; int rc; assert(qpair != NULL); @@ -471,23 +472,24 @@ spdk_nvme_ctrlr_reconnect_io_qpair(struct spdk_nvme_qpair *qpair) ctrlr = qpair->ctrlr; nvme_robust_mutex_lock(&ctrlr->ctrlr_lock); + qpair_state = nvme_qpair_get_state(qpair); if (ctrlr->is_removed) { rc = -ENODEV; goto out; } - if (ctrlr->is_resetting) { + if (ctrlr->is_resetting || qpair_state == NVME_QPAIR_DISCONNECTING) { rc = -EAGAIN; goto out; } - if (ctrlr->is_failed) { + if (ctrlr->is_failed || qpair_state == NVME_QPAIR_DESTROYING) { rc = -ENXIO; goto out; } - if (nvme_qpair_get_state(qpair) != NVME_QPAIR_DISCONNECTED) { + if (qpair_state != NVME_QPAIR_DISCONNECTED) { rc = 0; goto out; }