nvme/rdma: Use RDMA provider API to post recv WRs

Signed-off-by: Alexey Marchuk <alexeymar@mellanox.com>
Change-Id: I47cc1a21af1104f681519e542edaf66e363bb214
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6296
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Alexey Marchuk 2020-12-03 18:16:47 +03:00 committed by Tomasz Zawadzki
parent 3caf2e710f
commit 47afb9280f

View File

@ -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);