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 <ziye.yang@intel.com>
This commit is contained in:
Ziye Yang 2017-01-25 12:34:53 +08:00 committed by Daniel Verkamp
parent 5f3e922a6a
commit 47ae3957eb

View File

@ -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;
}