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: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/423745 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Seth Howell <seth.howell5141@gmail.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
764346697a
commit
e6b2caee51
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user