Loading lib/nvme/nvme_rdma.c +33 −17 Original line number Diff line number Diff line Loading @@ -93,6 +93,8 @@ struct nvme_rdma_qpair { struct ibv_sge *rsp_sgls; struct spdk_nvme_cpl *rsps; struct ibv_recv_wr *rsp_recv_wrs; /* Memory region describing all rsps for this qpair */ struct ibv_mr *rsp_mr; Loading @@ -102,6 +104,8 @@ struct nvme_rdma_qpair { struct spdk_nvme_rdma_req { int id; struct ibv_send_wr send_wr; struct nvme_request *req; enum spdk_nvme_data_transfer xfer; Loading Loading @@ -257,17 +261,18 @@ nvme_rdma_post_copy_mem(struct spdk_nvme_rdma_req *rdma_req) static int nvme_rdma_post_recv(struct nvme_rdma_qpair *rqpair, uint16_t rsp_idx) { struct ibv_recv_wr wr, *bad_wr = NULL; struct ibv_recv_wr *wr, *bad_wr = NULL; int rc; wr.wr_id = rsp_idx; wr.next = NULL; wr.sg_list = &rqpair->rsp_sgls[rsp_idx]; wr.num_sge = 1; wr = &rqpair->rsp_recv_wrs[rsp_idx]; wr->wr_id = rsp_idx; wr->next = NULL; wr->sg_list = &rqpair->rsp_sgls[rsp_idx]; wr->num_sge = 1; nvme_rdma_trace_ibv_sge(wr.sg_list); nvme_rdma_trace_ibv_sge(wr->sg_list); rc = ibv_post_recv(rqpair->cm_id->qp, &wr, &bad_wr); rc = ibv_post_recv(rqpair->cm_id->qp, wr, &bad_wr); if (rc) { SPDK_ERRLOG("Failure posting rdma recv, rc = 0x%x\n", rc); } Loading @@ -287,6 +292,8 @@ nvme_rdma_free_rsps(struct nvme_rdma_qpair *rqpair) rqpair->rsps = NULL; free(rqpair->rsp_sgls); rqpair->rsp_sgls = NULL; free(rqpair->rsp_recv_wrs); rqpair->rsp_recv_wrs = NULL; } static int Loading @@ -296,6 +303,7 @@ nvme_rdma_alloc_rsps(struct nvme_rdma_qpair *rqpair) rqpair->rsp_mr = NULL; rqpair->rsps = NULL; rqpair->rsp_recv_wrs = NULL; rqpair->rsp_sgls = calloc(rqpair->max_queue_depth, sizeof(*rqpair->rsp_sgls)); if (!rqpair->rsp_sgls) { Loading @@ -303,6 +311,13 @@ nvme_rdma_alloc_rsps(struct nvme_rdma_qpair *rqpair) goto fail; } rqpair->rsp_recv_wrs = calloc(rqpair->max_queue_depth, sizeof(*rqpair->rsp_recv_wrs)); if (!rqpair->rsp_recv_wrs) { SPDK_ERRLOG("Failed to allocate rsp_recv_wrs\n"); goto fail; } rqpair->rsps = calloc(rqpair->max_queue_depth, sizeof(*rqpair->rsps)); if (!rqpair->rsps) { SPDK_ERRLOG("can not allocate rdma rsps\n"); Loading Loading @@ -1255,7 +1270,7 @@ nvme_rdma_qpair_submit_request(struct spdk_nvme_qpair *qpair, { struct nvme_rdma_qpair *rqpair; struct spdk_nvme_rdma_req *rdma_req; struct ibv_send_wr wr, *bad_wr = NULL; struct ibv_send_wr *wr, *bad_wr = NULL; int rc; rqpair = nvme_rdma_qpair(qpair); Loading @@ -1267,17 +1282,18 @@ nvme_rdma_qpair_submit_request(struct spdk_nvme_qpair *qpair, nvme_rdma_pre_copy_mem(rdma_req); memset(&wr, 0, sizeof(wr)); wr.wr_id = (uint64_t)rdma_req; wr.next = NULL; wr.opcode = IBV_WR_SEND; wr.send_flags = IBV_SEND_SIGNALED; wr.sg_list = &rdma_req->send_sgl; wr.num_sge = 1; wr = &rdma_req->send_wr; wr->wr_id = (uint64_t)rdma_req; wr->next = NULL; wr->opcode = IBV_WR_SEND; wr->send_flags = IBV_SEND_SIGNALED; wr->sg_list = &rdma_req->send_sgl; wr->num_sge = 1; wr->imm_data = 0; nvme_rdma_trace_ibv_sge(wr.sg_list); nvme_rdma_trace_ibv_sge(wr->sg_list); rc = ibv_post_send(rqpair->cm_id->qp, &wr, &bad_wr); rc = ibv_post_send(rqpair->cm_id->qp, wr, &bad_wr); if (rc) { SPDK_ERRLOG("Failure posting rdma send for NVMf completion, rc = 0x%x\n", rc); } Loading Loading
lib/nvme/nvme_rdma.c +33 −17 Original line number Diff line number Diff line Loading @@ -93,6 +93,8 @@ struct nvme_rdma_qpair { struct ibv_sge *rsp_sgls; struct spdk_nvme_cpl *rsps; struct ibv_recv_wr *rsp_recv_wrs; /* Memory region describing all rsps for this qpair */ struct ibv_mr *rsp_mr; Loading @@ -102,6 +104,8 @@ struct nvme_rdma_qpair { struct spdk_nvme_rdma_req { int id; struct ibv_send_wr send_wr; struct nvme_request *req; enum spdk_nvme_data_transfer xfer; Loading Loading @@ -257,17 +261,18 @@ nvme_rdma_post_copy_mem(struct spdk_nvme_rdma_req *rdma_req) static int nvme_rdma_post_recv(struct nvme_rdma_qpair *rqpair, uint16_t rsp_idx) { struct ibv_recv_wr wr, *bad_wr = NULL; struct ibv_recv_wr *wr, *bad_wr = NULL; int rc; wr.wr_id = rsp_idx; wr.next = NULL; wr.sg_list = &rqpair->rsp_sgls[rsp_idx]; wr.num_sge = 1; wr = &rqpair->rsp_recv_wrs[rsp_idx]; wr->wr_id = rsp_idx; wr->next = NULL; wr->sg_list = &rqpair->rsp_sgls[rsp_idx]; wr->num_sge = 1; nvme_rdma_trace_ibv_sge(wr.sg_list); nvme_rdma_trace_ibv_sge(wr->sg_list); rc = ibv_post_recv(rqpair->cm_id->qp, &wr, &bad_wr); rc = ibv_post_recv(rqpair->cm_id->qp, wr, &bad_wr); if (rc) { SPDK_ERRLOG("Failure posting rdma recv, rc = 0x%x\n", rc); } Loading @@ -287,6 +292,8 @@ nvme_rdma_free_rsps(struct nvme_rdma_qpair *rqpair) rqpair->rsps = NULL; free(rqpair->rsp_sgls); rqpair->rsp_sgls = NULL; free(rqpair->rsp_recv_wrs); rqpair->rsp_recv_wrs = NULL; } static int Loading @@ -296,6 +303,7 @@ nvme_rdma_alloc_rsps(struct nvme_rdma_qpair *rqpair) rqpair->rsp_mr = NULL; rqpair->rsps = NULL; rqpair->rsp_recv_wrs = NULL; rqpair->rsp_sgls = calloc(rqpair->max_queue_depth, sizeof(*rqpair->rsp_sgls)); if (!rqpair->rsp_sgls) { Loading @@ -303,6 +311,13 @@ nvme_rdma_alloc_rsps(struct nvme_rdma_qpair *rqpair) goto fail; } rqpair->rsp_recv_wrs = calloc(rqpair->max_queue_depth, sizeof(*rqpair->rsp_recv_wrs)); if (!rqpair->rsp_recv_wrs) { SPDK_ERRLOG("Failed to allocate rsp_recv_wrs\n"); goto fail; } rqpair->rsps = calloc(rqpair->max_queue_depth, sizeof(*rqpair->rsps)); if (!rqpair->rsps) { SPDK_ERRLOG("can not allocate rdma rsps\n"); Loading Loading @@ -1255,7 +1270,7 @@ nvme_rdma_qpair_submit_request(struct spdk_nvme_qpair *qpair, { struct nvme_rdma_qpair *rqpair; struct spdk_nvme_rdma_req *rdma_req; struct ibv_send_wr wr, *bad_wr = NULL; struct ibv_send_wr *wr, *bad_wr = NULL; int rc; rqpair = nvme_rdma_qpair(qpair); Loading @@ -1267,17 +1282,18 @@ nvme_rdma_qpair_submit_request(struct spdk_nvme_qpair *qpair, nvme_rdma_pre_copy_mem(rdma_req); memset(&wr, 0, sizeof(wr)); wr.wr_id = (uint64_t)rdma_req; wr.next = NULL; wr.opcode = IBV_WR_SEND; wr.send_flags = IBV_SEND_SIGNALED; wr.sg_list = &rdma_req->send_sgl; wr.num_sge = 1; wr = &rdma_req->send_wr; wr->wr_id = (uint64_t)rdma_req; wr->next = NULL; wr->opcode = IBV_WR_SEND; wr->send_flags = IBV_SEND_SIGNALED; wr->sg_list = &rdma_req->send_sgl; wr->num_sge = 1; wr->imm_data = 0; nvme_rdma_trace_ibv_sge(wr.sg_list); nvme_rdma_trace_ibv_sge(wr->sg_list); rc = ibv_post_send(rqpair->cm_id->qp, &wr, &bad_wr); rc = ibv_post_send(rqpair->cm_id->qp, wr, &bad_wr); if (rc) { SPDK_ERRLOG("Failure posting rdma send for NVMf completion, rc = 0x%x\n", rc); } Loading