From d77c030172c3ed489212e950c33e15a6cde9ee1b Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Fri, 13 Jan 2017 14:44:25 -0700 Subject: [PATCH] nvmf: NVMe-oF 1.1 adds cntlid to RDMA private data Change-Id: I44ec5264fc93fa85706750cb23bbd0ed0587db81 Signed-off-by: Ben Walker --- include/spdk/nvmf_spec.h | 4 +++- lib/nvme/nvme_rdma.c | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/spdk/nvmf_spec.h b/include/spdk/nvmf_spec.h index f720c1a70..b4f9e8fd0 100644 --- a/include/spdk/nvmf_spec.h +++ b/include/spdk/nvmf_spec.h @@ -425,7 +425,8 @@ struct spdk_nvmf_rdma_request_private_data { uint16_t qid; /* queue id */ uint16_t hrqsize; /* host receive queue size */ uint16_t hsqsize; /* host send queue size */ - uint8_t reserved[24]; + uint16_t cntlid; /* controller id */ + uint8_t reserved[22]; }; SPDK_STATIC_ASSERT(sizeof(struct spdk_nvmf_rdma_request_private_data) == 32, "Incorrect size"); @@ -458,6 +459,7 @@ enum spdk_nvmf_rdma_transport_errors { SPDK_NVMF_RDMA_ERROR_NO_RESOURCES = 0x6, SPDK_NVMF_RDMA_ERROR_INVALID_IRD = 0x7, SPDK_NVMF_RDMA_ERROR_INVALID_ORD = 0x8, + SPDK_NVMF_RDMA_ERROR_INVALID_CNTLID = 0x9, }; #pragma pack(pop) diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index 5ec6a9643..f9cc27f54 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -582,6 +582,8 @@ nvme_rdma_connect(struct nvme_rdma_qpair *rqpair) struct ibv_device_attr attr; int ret; struct rdma_cm_event *event; + struct spdk_nvme_ctrlr *ctrlr; + struct nvme_rdma_ctrlr *rctrlr; ret = ibv_query_device(rqpair->cm_id->verbs, &attr); if (ret != 0) { @@ -591,9 +593,17 @@ nvme_rdma_connect(struct nvme_rdma_qpair *rqpair) param.responder_resources = nvme_min(rqpair->num_entries, attr.max_qp_rd_atom); + ctrlr = rqpair->qpair.ctrlr; + if (!ctrlr) { + return -1; + } + + rctrlr = nvme_rdma_ctrlr(ctrlr); + request_data.qid = rqpair->qpair.id; request_data.hrqsize = rqpair->num_entries; request_data.hsqsize = rqpair->num_entries - 1; + request_data.cntlid = rctrlr->cntlid; param.private_data = &request_data; param.private_data_len = sizeof(request_data);