From b335ab476574ad0bb22fe66313d0332618fd9f36 Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Fri, 22 Feb 2019 09:02:11 -0700 Subject: [PATCH] rdma: change the logic of rdma_qpair_process_pending I think this simplifies the process a little bit. Change-Id: Icc87a59c9f6fd965ef35531975b7036d85c4bc95 Signed-off-by: Seth Howell Reviewed-on: https://review.gerrithub.io/c/445916 (master) Signed-off-by: Tomasz Zawadzki Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/447622 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/nvmf/rdma.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index 014f4e12e..ddbe441dc 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -1445,8 +1445,6 @@ spdk_nvmf_rdma_request_process(struct spdk_nvmf_rdma_transport *rtransport, rdma_req->req.cmd = (union nvmf_h2c_msg *)rdma_recv->sgl[0].addr; memset(rdma_req->req.rsp, 0, sizeof(*rdma_req->req.rsp)); - STAILQ_REMOVE(&rqpair->incoming_queue, rdma_recv, spdk_nvmf_rdma_recv, link); - if (rqpair->ibv_attr.qp_state == IBV_QPS_ERR || rqpair->qpair.state != SPDK_NVMF_QPAIR_ACTIVE) { rdma_req->state = RDMA_REQUEST_STATE_COMPLETED; break; @@ -2149,7 +2147,6 @@ spdk_nvmf_rdma_qpair_process_pending(struct spdk_nvmf_rdma_transport *rtransport struct spdk_nvmf_rdma_qpair *rqpair, bool drain) { struct spdk_nvmf_rdma_request *rdma_req, *req_tmp; - struct spdk_nvmf_rdma_recv *rdma_recv, *recv_tmp; /* We process I/O in the data transfer pending queue at the highest priority. RDMA reads first */ STAILQ_FOREACH_SAFE(rdma_req, &rqpair->pending_rdma_read_queue, state_link, req_tmp) { @@ -2173,16 +2170,12 @@ spdk_nvmf_rdma_qpair_process_pending(struct spdk_nvmf_rdma_transport *rtransport } } - /* The lowest priority is processing newly received commands */ - STAILQ_FOREACH_SAFE(rdma_recv, &rqpair->incoming_queue, link, recv_tmp) { - - if (STAILQ_EMPTY(&rqpair->free_queue)) { - break; - } + while (!STAILQ_EMPTY(&rqpair->free_queue) && !STAILQ_EMPTY(&rqpair->incoming_queue)) { rdma_req = STAILQ_FIRST(&rqpair->free_queue); - rdma_req->recv = rdma_recv; STAILQ_REMOVE_HEAD(&rqpair->free_queue, state_link); + rdma_req->recv = STAILQ_FIRST(&rqpair->incoming_queue); + STAILQ_REMOVE_HEAD(&rqpair->incoming_queue, link); rqpair->qd++; rdma_req->state = RDMA_REQUEST_STATE_NEW;