nvmf/rdma: Handle successful requests on an errored queue pair
Due to polling order, a request may have completed its previous operation successfully, but the queue pair may be in an error state. In this case, move the request directly to the completed state to release resources. Change-Id: Ic0a5ba036af246b1b6155169cf9682e943b73120 Signed-off-by: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/423412 Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Seth Howell <seth.howell5141@gmail.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
194ba5833f
commit
745a54e420
@ -1243,6 +1243,12 @@ spdk_nvmf_rdma_request_process(struct spdk_nvmf_rdma_transport *rtransport,
|
||||
|
||||
assert(rdma_req->state != RDMA_REQUEST_STATE_FREE);
|
||||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
/* The loop here is to allow for several back-to-back state changes. */
|
||||
do {
|
||||
prev_state = rdma_req->state;
|
||||
|
Loading…
Reference in New Issue
Block a user