From 655d54f3f17601b0c3c5d25844ec84637c04cd7d Mon Sep 17 00:00:00 2001 From: Darek Stojaczyk Date: Tue, 5 Feb 2019 12:51:53 +0100 Subject: [PATCH] nvme: remaning changes related to nvme hooks Change-Id: I07f3f403bef26a7c3e41b3c9f74e7ba4e378b2cc Signed-off-by: zkhatami88 Reviewed-on: https://review.gerrithub.io/c/443650 Reviewed-by: Ben Walker Reviewed-by: Jim Harris Tested-by: SPDK CI Jenkins --- lib/nvme/nvme_rdma.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index ec761cb85..e9cb95bdb 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -922,14 +922,23 @@ nvme_rdma_build_contig_inline_request(struct nvme_rdma_qpair *rqpair, assert(nvme_payload_type(&req->payload) == NVME_PAYLOAD_TYPE_CONTIG); requested_size = req->payload_size; - mr = (struct ibv_mr *)spdk_mem_map_translate(rqpair->mr_map->map, - (uint64_t)payload, &requested_size); - if (mr == NULL || requested_size < req->payload_size) { - if (mr) { - SPDK_ERRLOG("Data buffer split over multiple RDMA Memory Regions\n"); + if (!g_nvme_hooks.get_rkey) { + mr = (struct ibv_mr *)spdk_mem_map_translate(rqpair->mr_map->map, + (uint64_t)payload, &requested_size); + + if (mr == NULL || requested_size < req->payload_size) { + if (mr) { + SPDK_ERRLOG("Data buffer split over multiple RDMA Memory Regions\n"); + } + return -EINVAL; } - return -EINVAL; + rdma_req->send_sgl[1].lkey = mr->lkey; + } else { + rdma_req->send_sgl[1].lkey = spdk_mem_map_translate(rqpair->mr_map->map, + (uint64_t)payload, + &requested_size); + } /* The first element of this SGL is pointing at an @@ -940,7 +949,6 @@ nvme_rdma_build_contig_inline_request(struct nvme_rdma_qpair *rqpair, rdma_req->send_sgl[1].addr = (uint64_t)payload; rdma_req->send_sgl[1].length = (uint32_t)req->payload_size; - rdma_req->send_sgl[1].lkey = mr->lkey; /* The RDMA SGL contains two elements. The first describes * the NVMe command and the second describes the data