From 8c6a3455349995fedda809ab14af1064d7e5e000 Mon Sep 17 00:00:00 2001 From: Alexey Marchuk Date: Thu, 2 Apr 2020 14:03:11 +0300 Subject: [PATCH] nvme/rdma: Use RDMA provider API to send WRs Change-Id: I3dc87751d250da84d988b1c7a9c57112b5bd10b0 Signed-off-by: Alexey Marchuk Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1661 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Seth Howell Reviewed-by: Jim Harris --- lib/nvme/nvme_rdma.c | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index 7dff0f255..736de7d1b 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -563,21 +563,21 @@ nvme_rdma_qpair_submit_sends(struct nvme_rdma_qpair *rqpair) struct ibv_send_wr *bad_send_wr; int rc; - if (rqpair->sends_to_post.first) { - rc = ibv_post_send(rqpair->rdma_qp->qp, rqpair->sends_to_post.first, &bad_send_wr); - if (spdk_unlikely(rc)) { - SPDK_ERRLOG("Failed to post WRs on send queue, errno %d (%s), bad_wr %p\n", - rc, spdk_strerror(rc), bad_send_wr); - /* Restart queue from bad wr. If it failed during - * completion processing, controller will be moved to - * failed state. Otherwise it will likely fail again - * in next submit attempt from completion processing. - */ - rqpair->sends_to_post.first = bad_send_wr; - return -1; - } - rqpair->sends_to_post.first = NULL; + rc = spdk_rdma_qp_flush_send_wrs(rqpair->rdma_qp, &bad_send_wr); + + if (spdk_unlikely(rc)) { + SPDK_ERRLOG("Failed to post WRs on send queue, errno %d (%s), bad_wr %p\n", + rc, spdk_strerror(rc), bad_send_wr); + + /* Restart queue from bad wr. If it failed during + * completion processing, controller will be moved to + * failed state. Otherwise it will likely fail again + * in next submit attempt from completion processing. + */ + spdk_rdma_qp_queue_send_wrs(rqpair->rdma_qp, bad_send_wr); + return rc; } + return 0; } @@ -612,13 +612,7 @@ nvme_rdma_qpair_queue_send_wr(struct nvme_rdma_qpair *rqpair, struct ibv_send_wr { assert(wr->next == NULL); - if (rqpair->sends_to_post.first == NULL) { - rqpair->sends_to_post.first = wr; - } else { - rqpair->sends_to_post.last->next = wr; - } - - rqpair->sends_to_post.last = wr; + spdk_rdma_qp_queue_send_wrs(rqpair->rdma_qp, wr); if (!rqpair->delay_cmd_submit) { return nvme_rdma_qpair_submit_sends(rqpair);