diff --git a/lib/nvme/nvme_pcie_common.c b/lib/nvme/nvme_pcie_common.c index 4a9bd749b..a74388afd 100644 --- a/lib/nvme/nvme_pcie_common.c +++ b/lib/nvme/nvme_pcie_common.c @@ -1759,11 +1759,12 @@ nvme_pcie_poll_group_process_completions(struct spdk_nvme_transport_poll_group * STAILQ_FOREACH_SAFE(qpair, &tgroup->connected_qpairs, poll_group_stailq, tmp_qpair) { local_completions = spdk_nvme_qpair_process_completions(qpair, completions_per_qpair); - if (local_completions < 0) { + if (spdk_unlikely(local_completions < 0)) { disconnected_qpair_cb(qpair, tgroup->group->ctx); - local_completions = 0; + total_completions = -ENXIO; + } else if (spdk_likely(total_completions >= 0)) { + total_completions += local_completions; } - total_completions += local_completions; } return total_completions; diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index 3b48092d1..92659ce77 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -2910,14 +2910,13 @@ nvme_rdma_poll_group_process_completions(struct spdk_nvme_transport_poll_group * struct nvme_rdma_qpair *rqpair; struct nvme_rdma_poll_group *group; struct nvme_rdma_poller *poller; - int num_qpairs = 0, batch_size, rc; + int num_qpairs = 0, batch_size, rc, rc2 = 0; int64_t total_completions = 0; uint64_t completions_allowed = 0; uint64_t completions_per_poller = 0; uint64_t poller_completions = 0; uint64_t rdma_completions; - if (completions_per_qpair == 0) { completions_per_qpair = MAX_COMPLETIONS_PER_POLL; } @@ -2949,6 +2948,7 @@ nvme_rdma_poll_group_process_completions(struct spdk_nvme_transport_poll_group * } if (spdk_unlikely(qpair->transport_failure_reason != SPDK_NVME_QPAIR_FAILURE_NONE)) { + rc2 = -ENXIO; nvme_rdma_fail_qpair(qpair, 0); continue; } @@ -3012,7 +3012,7 @@ nvme_rdma_poll_group_process_completions(struct spdk_nvme_transport_poll_group * } } - return total_completions; + return rc2 != 0 ? rc2 : total_completions; } static int