From a475aed55d80976611520dc4d37e88e6ce7b64ed Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Wed, 1 Mar 2023 21:30:22 +0900 Subject: [PATCH] nvme_pcie: Call transport_ctrlr_disconnect_qpair_done() if ctrlr_disable_poll() failed nvme_ctrlr_disable_poll() continued to be called until it returned 0. However, if the corresponding drive was unresponsive, the continuous calls consumed CPU and affected other operations. If the corresponding drive is unresponsive, we cannot complete disabling the controller. Hence, call nvme_transport_ctrlr_disconnect_qpair_done() if nvme_ctrlr_disable_poll() returned any value other than -EAGAIN. Even before this patch, nvme_ctrlr_disable_poll() collected an error log if it failed. Hence, we do not have to add more error logs. Fixes issue #2931 Signed-off-by: Shuhei Matsumoto Change-Id: I26cabb94e5744e3a2d975670adbf2e4e48d5bd7a Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/17002 Reviewed-by: Ben Walker Reviewed-by: Aleksey Marchuk Reviewed-by: Michael Haeuptle Reviewed-by: Jim Harris Tested-by: SPDK CI Jenkins --- lib/nvme/nvme_pcie_common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/nvme/nvme_pcie_common.c b/lib/nvme/nvme_pcie_common.c index 1b2ef9b81..90330c208 100644 --- a/lib/nvme/nvme_pcie_common.c +++ b/lib/nvme/nvme_pcie_common.c @@ -973,7 +973,7 @@ nvme_pcie_qpair_process_completions(struct spdk_nvme_qpair *qpair, uint32_t max_ if (nvme_qpair_get_state(qpair) == NVME_QPAIR_DISCONNECTING) { rc = nvme_ctrlr_disable_poll(qpair->ctrlr); - if (rc == 0) { + if (rc != -EAGAIN) { nvme_transport_ctrlr_disconnect_qpair_done(qpair); } }