From 2f7de0751ba2c9975f0751dce9ee8a762a0dc2ed Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Tue, 27 Nov 2018 14:09:29 -0700 Subject: [PATCH] nvme_rdma/nvmf: add cb_fns to check mr contiguity This is necessary to confirm that a buffer that spans a 2_MB boundary is still in a single MR. Change-Id: If0d14e514ab2197a0d2e3af4f565f56d50591210 Signed-off-by: Seth Howell Reviewed-on: https://review.gerrithub.io/435179 (master) Reviewed-on: https://review.gerrithub.io/435689 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- lib/nvme/nvme_rdma.c | 9 ++++++++- lib/nvmf/rdma.c | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index b356e3a16..d9733fbf1 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -642,6 +642,13 @@ nvme_rdma_mr_map_notify(void *cb_ctx, struct spdk_mem_map *map, return rc; } +static int +nvme_rdma_check_contiguous_entries(uint64_t addr_1, uint64_t addr_2) +{ + /* Two contiguous mappings will point to the same address which is the start of the RDMA MR. */ + return addr_1 == addr_2; +} + static int nvme_rdma_register_mem(struct nvme_rdma_qpair *rqpair) { @@ -649,7 +656,7 @@ nvme_rdma_register_mem(struct nvme_rdma_qpair *rqpair) struct spdk_nvme_rdma_mr_map *mr_map; const struct spdk_mem_map_ops nvme_rdma_map_ops = { .notify_cb = nvme_rdma_mr_map_notify, - .are_contiguous = NULL + .are_contiguous = nvme_rdma_check_contiguous_entries }; pthread_mutex_lock(&g_rdma_mr_maps_mutex); diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index 1a66efc1c..060b63792 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -1031,6 +1031,13 @@ spdk_nvmf_rdma_mem_notify(void *cb_ctx, struct spdk_mem_map *map, return 0; } +static int +spdk_nvmf_rdma_check_contiguous_entries(uint64_t addr_1, uint64_t addr_2) +{ + /* Two contiguous mappings will point to the same address which is the start of the RDMA MR. */ + return addr_1 == addr_2; +} + typedef enum spdk_nvme_data_transfer spdk_nvme_data_transfer_t; static spdk_nvme_data_transfer_t @@ -1495,7 +1502,7 @@ spdk_nvmf_rdma_create(struct spdk_nvmf_transport_opts *opts) const struct spdk_mem_map_ops nvmf_rdma_map_ops = { .notify_cb = spdk_nvmf_rdma_mem_notify, - .are_contiguous = NULL + .are_contiguous = spdk_nvmf_rdma_check_contiguous_entries }; rtransport = calloc(1, sizeof(*rtransport));