rdma: remove reqs from read/write queues in error
Not doing so can cause us to hit asserts during the shutdown path. This should fix an intermittent failure we are seeing on the test pool where we hit the assert rdma_req->state != RDMA_REQUEST_STATE_FREE in spdk_nvmf_rdma_request_process. Note that this problem doesn't cause any data corruption when debug is not enabled, it just causes us to probcess a subset of commands through the state machine one extra time suring qpair shutdown. Change-Id: Ibc36bfea87ec4089b8e2c7a915f48714fddb0b09 Signed-off-by: Seth Howell <seth.howell@intel.com> Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/447852 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
80c98d80b6
commit
dc3f8f8c58
@ -1449,6 +1449,10 @@ spdk_nvmf_rdma_request_process(struct spdk_nvmf_rdma_transport *rtransport,
|
|||||||
if (rqpair->ibv_attr.qp_state == IBV_QPS_ERR || rqpair->qpair.state != SPDK_NVMF_QPAIR_ACTIVE) {
|
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) {
|
if (rdma_req->state == RDMA_REQUEST_STATE_NEED_BUFFER) {
|
||||||
TAILQ_REMOVE(&rgroup->pending_data_buf_queue, rdma_req, link);
|
TAILQ_REMOVE(&rgroup->pending_data_buf_queue, rdma_req, link);
|
||||||
|
} else if (rdma_req->state == RDMA_REQUEST_STATE_DATA_TRANSFER_TO_CONTROLLER_PENDING) {
|
||||||
|
STAILQ_REMOVE(&rqpair->pending_rdma_read_queue, rdma_req, spdk_nvmf_rdma_request, state_link);
|
||||||
|
} else if (rdma_req->state == RDMA_REQUEST_STATE_DATA_TRANSFER_TO_HOST_PENDING) {
|
||||||
|
STAILQ_REMOVE(&rqpair->pending_rdma_write_queue, rdma_req, spdk_nvmf_rdma_request, state_link);
|
||||||
}
|
}
|
||||||
spdk_nvmf_rdma_request_set_state(rdma_req, RDMA_REQUEST_STATE_COMPLETED);
|
spdk_nvmf_rdma_request_set_state(rdma_req, RDMA_REQUEST_STATE_COMPLETED);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user