From e7988759d055722c7c3b9debb337576820b94c27 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Fri, 14 Sep 2018 10:40:27 -0700 Subject: [PATCH] nvmf/rdma: Improve behavior when unable to send response capsule Previously there was only an assert if it failed to send a response capsule. Now, release the resources associated with the request (and leave the assert in). This is a slight improvement. A full fix will likely involve forcibly terminating the connection. Change-Id: I62377078d0cb310042966a0eaca4c80c5f91f9f7 Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/425633 Chandler-Test-Pool: SPDK Automated Test System Tested-by: SPDK CI Jenkins Reviewed-by: Changpeng Liu Reviewed-by: Jim Harris Reviewed-by: Shuhei Matsumoto --- lib/nvmf/rdma.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index d6a2c92ef..b4d5541b9 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -1548,10 +1548,14 @@ spdk_nvmf_rdma_request_process(struct spdk_nvmf_rdma_transport *rtransport, (uintptr_t)rdma_req, (uintptr_t)rqpair->cm_id); rc = request_transfer_out(&rdma_req->req, &data_posted); assert(rc == 0); /* No good way to handle this currently */ - spdk_nvmf_rdma_request_set_state(rdma_req, - data_posted ? - RDMA_REQUEST_STATE_TRANSFERRING_CONTROLLER_TO_HOST : - RDMA_REQUEST_STATE_COMPLETING); + if (rc) { + spdk_nvmf_rdma_request_set_state(rdma_req, RDMA_REQUEST_STATE_COMPLETED); + } else { + spdk_nvmf_rdma_request_set_state(rdma_req, + data_posted ? + RDMA_REQUEST_STATE_TRANSFERRING_CONTROLLER_TO_HOST : + RDMA_REQUEST_STATE_COMPLETING); + } break; case RDMA_REQUEST_STATE_TRANSFERRING_CONTROLLER_TO_HOST: spdk_trace_record(TRACE_RDMA_REQUEST_STATE_TRANSFERRING_CONTROLLER_TO_HOST, 0, 0,