RDMA: fixing create qp failure due to not suppored send sge number,

some vendorse support less send sge then SPDK_NVMF_MAX_SGL_ENTRIES.

Change-Id: I5b550b537b6ff4ae5d7876a3f277f88cf06049e4
Signed-off-by: Leonid Ravich <Leonid.Ravich@dell.com>
Reviewed-on: https://review.gerrithub.io/421012
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>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
This commit is contained in:
Leonid Ravich 2018-08-01 16:38:39 +03:00 committed by Jim Harris
parent 008ec0bd91
commit eaea3f24cc

View File

@ -230,6 +230,8 @@ struct spdk_nvmf_rdma_qpair {
/* Number of requests in each state */ /* Number of requests in each state */
uint32_t state_cntr[RDMA_REQUEST_NUM_STATES]; uint32_t state_cntr[RDMA_REQUEST_NUM_STATES];
int max_sge;
/* Array of size "max_queue_depth" containing RDMA requests. */ /* Array of size "max_queue_depth" containing RDMA requests. */
struct spdk_nvmf_rdma_request *reqs; struct spdk_nvmf_rdma_request *reqs;
@ -561,7 +563,7 @@ spdk_nvmf_rdma_qpair_initialize(struct spdk_nvmf_qpair *qpair)
rqpair->ibv_init_attr.cap.max_send_wr = rqpair->max_queue_depth * rqpair->ibv_init_attr.cap.max_send_wr = rqpair->max_queue_depth *
2; /* SEND, READ, and WRITE operations */ 2; /* SEND, READ, and WRITE operations */
rqpair->ibv_init_attr.cap.max_recv_wr = rqpair->max_queue_depth; /* RECV operations */ rqpair->ibv_init_attr.cap.max_recv_wr = rqpair->max_queue_depth; /* RECV operations */
rqpair->ibv_init_attr.cap.max_send_sge = SPDK_NVMF_MAX_SGL_ENTRIES; rqpair->ibv_init_attr.cap.max_send_sge = rqpair->max_sge;
rqpair->ibv_init_attr.cap.max_recv_sge = NVMF_DEFAULT_RX_SGE; rqpair->ibv_init_attr.cap.max_recv_sge = NVMF_DEFAULT_RX_SGE;
rc = rdma_create_qp(rqpair->cm_id, NULL, &rqpair->ibv_init_attr); rc = rdma_create_qp(rqpair->cm_id, NULL, &rqpair->ibv_init_attr);
@ -918,6 +920,7 @@ nvmf_rdma_connect(struct spdk_nvmf_transport *transport, struct rdma_cm_event *e
rqpair->max_rw_depth = max_rw_depth; rqpair->max_rw_depth = max_rw_depth;
rqpair->cm_id = event->id; rqpair->cm_id = event->id;
rqpair->qpair.transport = transport; rqpair->qpair.transport = transport;
rqpair->max_sge = spdk_min(port->device->attr.max_sge, SPDK_NVMF_MAX_SGL_ENTRIES);
TAILQ_INIT(&rqpair->incoming_queue); TAILQ_INIT(&rqpair->incoming_queue);
event->id->context = &rqpair->qpair; event->id->context = &rqpair->qpair;