From 47ae3957eb941f6ed4720202f8cb4556cccc6ddc Mon Sep 17 00:00:00 2001 From: Ziye Yang Date: Wed, 25 Jan 2017 12:34:53 +0800 Subject: [PATCH] nvme/rdma: Invoke rdma_ack_cm_event in exceptional cases In our previous code, we did not ack the event in exceptional cases when we get a event via rdma_get_cm_event. Thus, the code may block with in this statement: rdma_destroy_id(rqpair->cm_id); in some exceptiaonal cases. And this patch will solve this issue. Change-Id: Iddb6fb5356a5ee0ed04e261a040ba53042fca302 Signed-off-by: Ziye Yang --- lib/nvme/nvme_rdma.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index f9cc27f54..e51a3c361 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -191,6 +191,7 @@ nvme_rdma_get_event(struct rdma_event_channel *channel, if (event->event != evt) { SPDK_ERRLOG("Received event %d from CM event channel, but expected event %d\n", event->event, evt); + rdma_ack_cm_event(event); return NULL; } @@ -622,6 +623,7 @@ nvme_rdma_connect(struct nvme_rdma_qpair *rqpair) accept_data = (struct spdk_nvmf_rdma_accept_private_data *)event->param.conn.private_data; if (accept_data == NULL) { + rdma_ack_cm_event(event); SPDK_ERRLOG("NVMe-oF target did not return accept data\n"); return -1; }