diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index ab6870bdb..d6a5cfb9d 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -2,7 +2,7 @@ * BSD LICENSE * * Copyright (c) Intel Corporation. All rights reserved. - * Copyright (c) 2019, 2020 Mellanox Technologies LTD. All rights reserved. + * Copyright (c) 2019-2021 Mellanox Technologies LTD. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -163,11 +163,6 @@ struct nvme_rdma_poll_group { STAILQ_HEAD(, nvme_rdma_destroyed_qpair) destroyed_qpairs; }; -struct spdk_nvme_recv_wr_list { - struct ibv_recv_wr *first; - struct ibv_recv_wr *last; -}; - /* Memory regions */ union nvme_rdma_mr { struct ibv_mr *mr; @@ -202,8 +197,6 @@ struct nvme_rdma_qpair { struct ibv_recv_wr *rsp_recv_wrs; - struct spdk_nvme_recv_wr_list recvs_to_post; - /* Memory region describing all rsps for this qpair */ union nvme_rdma_mr rsp_mr; @@ -662,20 +655,17 @@ nvme_rdma_qpair_submit_recvs(struct nvme_rdma_qpair *rqpair) struct ibv_recv_wr *bad_recv_wr; int rc = 0; - if (rqpair->recvs_to_post.first) { - rc = ibv_post_recv(rqpair->rdma_qp->qp, rqpair->recvs_to_post.first, &bad_recv_wr); - if (spdk_unlikely(rc)) { - SPDK_ERRLOG("Failed to post WRs on receive queue, errno %d (%s), bad_wr %p\n", - rc, spdk_strerror(rc), bad_recv_wr); - while (bad_recv_wr != NULL) { - assert(rqpair->current_num_sends > 0); - rqpair->current_num_recvs--; - bad_recv_wr = bad_recv_wr->next; - } + rc = spdk_rdma_qp_flush_recv_wrs(rqpair->rdma_qp, &bad_recv_wr); + if (spdk_unlikely(rc)) { + SPDK_ERRLOG("Failed to post WRs on receive queue, errno %d (%s), bad_wr %p\n", + rc, spdk_strerror(rc), bad_recv_wr); + while (bad_recv_wr != NULL) { + assert(rqpair->current_num_sends > 0); + rqpair->current_num_recvs--; + bad_recv_wr = bad_recv_wr->next; } - - rqpair->recvs_to_post.first = NULL; } + return rc; } @@ -708,13 +698,7 @@ nvme_rdma_qpair_queue_recv_wr(struct nvme_rdma_qpair *rqpair, struct ibv_recv_wr assert(rqpair->current_num_recvs < rqpair->num_entries); rqpair->current_num_recvs++; - if (rqpair->recvs_to_post.first == NULL) { - rqpair->recvs_to_post.first = wr; - } else { - rqpair->recvs_to_post.last->next = wr; - } - - rqpair->recvs_to_post.last = wr; + spdk_rdma_qp_queue_recv_wrs(rqpair->rdma_qp, wr); if (!rqpair->delay_cmd_submit) { return nvme_rdma_qpair_submit_recvs(rqpair);