From 9efe055ec1a45ff3f56a0698d94bea4693765e3d Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Mon, 27 Jun 2016 16:13:49 -0700 Subject: [PATCH] nvmf: Remove pending list for RDMA operations. The queue depth allowed for incoming commands is set such that we can do the maximum number of RDMA reads necessary. There is never a case where a READ will need to be queued anymore. Change-Id: I4f7e7f4a59f6358065b82f36a5e22744af210d07 Signed-off-by: Ben Walker --- lib/nvmf/rdma.c | 53 ------------------------------------------------- lib/nvmf/rdma.h | 2 -- 2 files changed, 55 deletions(-) diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index 9152e57fe..1ec3734f5 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -182,19 +182,12 @@ nvmf_drain_cq(struct spdk_nvmf_conn *conn) void nvmf_rdma_conn_cleanup(struct spdk_nvmf_conn *conn) { - struct spdk_nvmf_rdma_request *rdma_req; int rc; SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Enter\n"); rdma_destroy_qp(conn->rdma.cm_id); - while (!STAILQ_EMPTY(&conn->rdma.pending_rdma_reqs)) { - rdma_req = STAILQ_FIRST(&conn->rdma.pending_rdma_reqs); - STAILQ_REMOVE_HEAD(&conn->rdma.pending_rdma_reqs, link); - STAILQ_INSERT_TAIL(&conn->rdma.rdma_reqs, rdma_req, link); - } - free_rdma_reqs(conn); nvmf_drain_cq(conn); @@ -256,19 +249,6 @@ nvmf_post_rdma_read(struct spdk_nvmf_conn *conn, struct spdk_nvmf_rdma_request *rdma_req = get_rdma_req(req); int rc; - /* - * Queue the rdma read if it would exceed max outstanding - * RDMA read limit. - */ - if (conn->rdma.pending_rdma_read_count == conn->rdma.queue_depth) { - SPDK_TRACELOG(SPDK_TRACE_RDMA, "Insert rdma read into pending queue: rdma_req %p\n", - rdma_req); - STAILQ_REMOVE(&conn->rdma.rdma_reqs, rdma_req, spdk_nvmf_rdma_request, link); - STAILQ_INSERT_TAIL(&conn->rdma.pending_rdma_reqs, rdma_req, link); - return 0; - } - conn->rdma.pending_rdma_read_count++; - /* temporarily adjust SGE to only copy what the host is prepared to send. */ rdma_req->bb_sgl.length = req->length; @@ -592,7 +572,6 @@ nvmf_rdma_connect(struct rdma_cm_event *event) } SPDK_TRACELOG(SPDK_TRACE_DEBUG, "NVMf fabric connection initialized\n"); - STAILQ_INIT(&conn->rdma.pending_rdma_reqs); STAILQ_INIT(&conn->rdma.rdma_reqs); /* Allocate Buffers */ @@ -888,32 +867,6 @@ nvmf_rdma_init(void) return num_devices_found; } -static int -nvmf_process_pending_rdma(struct spdk_nvmf_conn *conn) -{ - struct spdk_nvmf_rdma_request *rdma_req; - int rc; - - conn->rdma.pending_rdma_read_count--; - if (!STAILQ_EMPTY(&conn->rdma.pending_rdma_reqs)) { - rdma_req = STAILQ_FIRST(&conn->rdma.pending_rdma_reqs); - STAILQ_REMOVE_HEAD(&conn->rdma.pending_rdma_reqs, link); - STAILQ_INSERT_TAIL(&conn->rdma.rdma_reqs, rdma_req, link); - - SPDK_TRACELOG(SPDK_TRACE_RDMA, "Issue rdma read from pending queue: rdma_req %p\n", - rdma_req); - - rc = nvmf_post_rdma_read(conn, &rdma_req->req); - if (rc) { - SPDK_ERRLOG("Unable to post pending rdma read descriptor\n"); - return -1; - } - } - - return 0; -} - - static int nvmf_recv(struct spdk_nvmf_conn *conn, struct ibv_wc *wc) { @@ -1012,12 +965,6 @@ nvmf_check_rdma_completions(struct spdk_nvmf_conn *conn) SPDK_ERRLOG("request_exec error %d after RDMA Read completion\n", rc); return -1; } - - rc = nvmf_process_pending_rdma(conn); - if (rc) { - SPDK_ERRLOG("nvmf_process_pending_rdma() failed: %d\n", rc); - return -1; - } break; case IBV_WC_RECV: diff --git a/lib/nvmf/rdma.h b/lib/nvmf/rdma.h index 2d77655ca..8368b5868 100644 --- a/lib/nvmf/rdma.h +++ b/lib/nvmf/rdma.h @@ -50,8 +50,6 @@ struct spdk_nvmf_rdma_conn { uint16_t queue_depth; - uint8_t pending_rdma_read_count; - STAILQ_HEAD(, spdk_nvmf_rdma_request) pending_rdma_reqs; STAILQ_HEAD(, spdk_nvmf_rdma_request) rdma_reqs; };