From 91f9c6f376301c43fcd24b1931bf373d000efb16 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Thu, 26 Sep 2019 17:01:33 +0900 Subject: [PATCH] nvmf/rdma: Simplify nvmf_rdma_request_parse_sgl() by cached pointers Pointers to struct spdk_nvmf_request and struct ibv_send_wr are used in many lines of spdk_nvmf_rdma_request_parse_sgl(). Caching and using them simplifies and improves readability a little for spdk_nvmf_rdma_request_parse_sgl(). Signed-off-by: Shuhei Matsumoto Change-Id: Ib000c9d4e7fb7bb415f4ac4622b32b12cc787c80 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/469537 Tested-by: SPDK CI Jenkins Community-CI: Broadcom SPDK FC-NVMe CI Reviewed-by: Jim Harris Reviewed-by: Alexey Marchuk Reviewed-by: Ben Walker --- lib/nvmf/rdma.c | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index 60c125d41b..d1b2977bc6 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -1797,14 +1797,16 @@ spdk_nvmf_rdma_request_parse_sgl(struct spdk_nvmf_rdma_transport *rtransport, struct spdk_nvmf_rdma_device *device, struct spdk_nvmf_rdma_request *rdma_req) { + struct spdk_nvmf_request *req = &rdma_req->req; struct spdk_nvme_cmd *cmd; struct spdk_nvme_cpl *rsp; struct spdk_nvme_sgl_descriptor *sgl; + struct ibv_send_wr *wr; int rc; uint32_t length; - cmd = &rdma_req->req.cmd->nvme_cmd; - rsp = &rdma_req->req.rsp->nvme_cpl; + cmd = &req->cmd->nvme_cmd; + rsp = &req->rsp->nvme_cpl; sgl = &cmd->dptr.sgl1; if (sgl->generic.type == SPDK_NVME_SGL_TYPE_KEYED_DATA_BLOCK && @@ -1828,7 +1830,7 @@ spdk_nvmf_rdma_request_parse_sgl(struct spdk_nvmf_rdma_transport *rtransport, #endif /* fill request length and populate iovs */ - rdma_req->req.length = length; + req->length = length; if (spdk_unlikely(rdma_req->dif_insert_or_strip)) { rdma_req->orig_length = length; @@ -1843,26 +1845,27 @@ spdk_nvmf_rdma_request_parse_sgl(struct spdk_nvmf_rdma_transport *rtransport, } /* backward compatible */ - rdma_req->req.data = rdma_req->req.iov[0].iov_base; + req->data = req->iov[0].iov_base; /* rdma wr specifics */ - rdma_req->data.wr.wr.rdma.rkey = sgl->keyed.key; - rdma_req->data.wr.wr.rdma.remote_addr = sgl->address; - if (rdma_req->req.xfer == SPDK_NVME_DATA_CONTROLLER_TO_HOST) { - rdma_req->data.wr.opcode = IBV_WR_RDMA_WRITE; - rdma_req->data.wr.next = &rdma_req->rsp.wr; - rdma_req->data.wr.send_flags &= ~IBV_SEND_SIGNALED; - } else if (rdma_req->req.xfer == SPDK_NVME_DATA_HOST_TO_CONTROLLER) { - rdma_req->data.wr.opcode = IBV_WR_RDMA_READ; - rdma_req->data.wr.next = NULL; - rdma_req->data.wr.send_flags |= IBV_SEND_SIGNALED; + wr = &rdma_req->data.wr; + wr->wr.rdma.rkey = sgl->keyed.key; + wr->wr.rdma.remote_addr = sgl->address; + if (req->xfer == SPDK_NVME_DATA_CONTROLLER_TO_HOST) { + wr->opcode = IBV_WR_RDMA_WRITE; + wr->next = &rdma_req->rsp.wr; + wr->send_flags &= ~IBV_SEND_SIGNALED; + } else if (req->xfer == SPDK_NVME_DATA_HOST_TO_CONTROLLER) { + wr->opcode = IBV_WR_RDMA_READ; + wr->next = NULL; + wr->send_flags |= IBV_SEND_SIGNALED; } /* set the number of outstanding data WRs for this request. */ rdma_req->num_outstanding_data_wr = 1; SPDK_DEBUGLOG(SPDK_LOG_RDMA, "Request %p took %d buffer/s from central pool\n", rdma_req, - rdma_req->req.iovcnt); + req->iovcnt); return 0; } else if (sgl->generic.type == SPDK_NVME_SGL_TYPE_DATA_BLOCK && @@ -1889,13 +1892,13 @@ spdk_nvmf_rdma_request_parse_sgl(struct spdk_nvmf_rdma_transport *rtransport, } rdma_req->num_outstanding_data_wr = 0; - rdma_req->req.data = rdma_req->recv->buf + offset; - rdma_req->req.data_from_pool = false; - rdma_req->req.length = sgl->unkeyed.length; + req->data = rdma_req->recv->buf + offset; + req->data_from_pool = false; + req->length = sgl->unkeyed.length; - rdma_req->req.iov[0].iov_base = rdma_req->req.data; - rdma_req->req.iov[0].iov_len = rdma_req->req.length; - rdma_req->req.iovcnt = 1; + req->iov[0].iov_base = req->data; + req->iov[0].iov_len = req->length; + req->iovcnt = 1; return 0; } else if (sgl->generic.type == SPDK_NVME_SGL_TYPE_LAST_SEGMENT && @@ -1911,10 +1914,10 @@ spdk_nvmf_rdma_request_parse_sgl(struct spdk_nvmf_rdma_transport *rtransport, } /* backward compatible */ - rdma_req->req.data = rdma_req->req.iov[0].iov_base; + req->data = req->iov[0].iov_base; SPDK_DEBUGLOG(SPDK_LOG_RDMA, "Request %p took %d buffer/s from central pool\n", rdma_req, - rdma_req->req.iovcnt); + req->iovcnt); return 0; }