Commit e6b2caee authored by Ben Walker's avatar Ben Walker Committed by Jim Harris
Browse files

nvmf/rdma: Immediately release resources for requests when killing qpair



Previously, this would release resources for requests if there
was an RDMA error on the qpair. Expand this case to include
scenarios where the qpair is in the process of intentionally
shutting down.

Change-Id: Ib018f190389ee2df20eba3dddcc7dcffdbb4909d
Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/423745


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarSeth Howell <seth.howell5141@gmail.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 76434669
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -1247,8 +1247,11 @@ spdk_nvmf_rdma_request_process(struct spdk_nvmf_rdma_transport *rtransport,

	/* If the queue pair is in an error state, force the request to the completed state
	 * to release resources. */
	if (rqpair->ibv_attr.qp_state == IBV_QPS_ERR) {
		rdma_req->state = RDMA_REQUEST_STATE_COMPLETED;
	if (rqpair->ibv_attr.qp_state == IBV_QPS_ERR || rqpair->qpair.state != SPDK_NVMF_QPAIR_ACTIVE) {
		if (rdma_req->state == RDMA_REQUEST_STATE_NEED_BUFFER) {
			TAILQ_REMOVE(&rqpair->ch->pending_data_buf_queue, rdma_req, link);
		}
		spdk_nvmf_rdma_request_set_state(rdma_req, RDMA_REQUEST_STATE_COMPLETED);
	}

	/* The loop here is to allow for several back-to-back state changes. */
@@ -1272,11 +1275,6 @@ spdk_nvmf_rdma_request_process(struct spdk_nvmf_rdma_transport *rtransport,

			TAILQ_REMOVE(&rqpair->incoming_queue, rdma_recv, link);

			if (rqpair->qpair.state != SPDK_NVMF_QPAIR_ACTIVE) {
				spdk_nvmf_rdma_request_set_state(rdma_req, RDMA_REQUEST_STATE_COMPLETED);
				break;
			}

			if (rqpair->ibv_attr.qp_state == IBV_QPS_ERR) {
				spdk_nvmf_rdma_request_set_state(rdma_req, RDMA_REQUEST_STATE_COMPLETED);
				break;