From d9a3a8e50c7b39ad3bbbfcd3fe4fcb2b8542d664 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Tue, 20 Dec 2016 12:10:08 -0700 Subject: [PATCH] nvme/rdma: nvme_rdma_recv now takes the response index Instead of passing the work completion, just pass the response index. This keeps the work completions localized to the polling function. Change-Id: I0e6a1d8564200b5ac3aa43dfd58ae152d439bbd8 Signed-off-by: Ben Walker --- lib/nvme/nvme_rdma.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index 8894551ac..bc16d0710 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -476,18 +476,12 @@ fail: } static int -nvme_rdma_recv(struct nvme_rdma_qpair *rqpair, struct ibv_wc *wc) +nvme_rdma_recv(struct nvme_rdma_qpair *rqpair, uint64_t rsp_idx) { struct spdk_nvme_qpair *qpair = &rqpair->qpair; struct spdk_nvme_rdma_req *rdma_req; struct spdk_nvme_cpl *rsp; struct nvme_request *req; - uint64_t rsp_idx = wc->wr_id; - - if (wc->byte_len < sizeof(struct spdk_nvmf_fabric_connect_rsp)) { - SPDK_ERRLOG("recv length %u less than capsule header\n", wc->byte_len); - return -1; - } assert(rsp_idx < rqpair->qpair.num_entries); rsp = &rqpair->rsps[rsp_idx]; @@ -1378,7 +1372,12 @@ nvme_rdma_qpair_process_completions(struct spdk_nvme_qpair *qpair, if (wc.opcode == IBV_WC_RECV) { SPDK_TRACELOG(SPDK_TRACE_DEBUG, "CQ recv completion\n"); - rc = nvme_rdma_recv(rqpair, &wc); + if (wc.byte_len < sizeof(struct spdk_nvme_cpl)) { + SPDK_ERRLOG("recv length %u less than expected response size\n", wc.byte_len); + return -1; + } + + rc = nvme_rdma_recv(rqpair, wc.wr_id); if (rc) { SPDK_ERRLOG("nvme_rdma_recv processing failure\n");