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:
parent
3caf2e710f
commit
47afb9280f
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user