Commit 58ba242b authored by Aleksey Marchuk's avatar Aleksey Marchuk Committed by Jim Harris
Browse files

nvme/rdma: Poll event channel in the new callaback



Previously we polled the event channel within
nvme_rdma_qpair_process_completions function, but this
function is not called when a controlelr is in failed
state (e.g. adminq is disconnected). Due to that we could
not get cm events for IO qpairs and couldn't disconnect them
properly.

Change-Id: I833c22b4840aeff007cecc3f98c1b2e819d709b3
Signed-off-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/25914


Reviewed-by: default avatarKonrad Sztyber <ksztyber@nvidia.com>
Community-CI: Mellanox Build Bot
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
parent 5ef090d9
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -2967,7 +2967,6 @@ nvme_rdma_qpair_process_completions(struct spdk_nvme_qpair *qpair,
				    uint32_t max_completions)
{
	struct nvme_rdma_qpair		*rqpair = nvme_rdma_qpair(qpair);
	struct nvme_rdma_ctrlr		*rctrlr = nvme_rdma_ctrlr(qpair->ctrlr);
	int				rc = 0, batch_size;
	struct ibv_cq			*cq;
	uint64_t			rdma_completions = 0;
@@ -3007,9 +3006,6 @@ nvme_rdma_qpair_process_completions(struct spdk_nvme_qpair *qpair,
		return -ENXIO;

	default:
		if (nvme_qpair_is_admin_queue(qpair)) {
			nvme_rdma_poll_events(rctrlr);
		}
		nvme_rdma_qpair_process_cm_event(rqpair);
		break;
	}
@@ -3636,6 +3632,12 @@ nvme_rdma_ctrlr_get_memory_domains(const struct spdk_nvme_ctrlr *ctrlr,
	return 1;
}

static int
nvme_rdma_ctrlr_process_transport_events(struct spdk_nvme_ctrlr *ctrlr)
{
	return nvme_rdma_poll_events(nvme_rdma_ctrlr(ctrlr));
}

void
spdk_nvme_rdma_init_hooks(struct spdk_nvme_rdma_hooks *hooks)
{
@@ -3668,6 +3670,7 @@ const struct spdk_nvme_transport_ops rdma_ops = {
	.ctrlr_disconnect_qpair = nvme_rdma_ctrlr_disconnect_qpair,

	.ctrlr_get_memory_domains = nvme_rdma_ctrlr_get_memory_domains,
	.ctrlr_process_transport_events = nvme_rdma_ctrlr_process_transport_events,

	.qpair_abort_reqs = nvme_rdma_qpair_abort_reqs,
	.qpair_reset = nvme_rdma_qpair_reset,