From da43f64b1752a6104629456c7c59cf3dc8d9efad Mon Sep 17 00:00:00 2001 From: Ziye Yang Date: Thu, 8 Dec 2016 21:45:25 +0800 Subject: [PATCH] nvme/rdma: Get right initiatior depth by ibv_device_query Change-Id: I125e95dd405c21c5aea852e619801f1ef2de94ee Signed-off-by: Ziye Yang --- lib/nvme/nvme_rdma.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index ac3e461af..c2df9119a 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -518,8 +518,15 @@ nvme_rdma_connect(struct nvme_rdma_qpair *rqpair) struct spdk_nvmf_rdma_request_private_data pdata; const union spdk_nvmf_rdma_private_data *data; struct rdma_cm_event *event; + struct ibv_device_attr attr; int ret; + ret = ibv_query_device(rqpair->cm_id->verbs, &attr); + if (ret != 0) { + SPDK_ERRLOG("Failed to query RDMA device attributes.\n"); + return ret; + } + memset(&conn_param, 0, sizeof(conn_param)); /* Note: the following parameters apply only for PS = RDMA_PS_TCP, and even then it appears that any values supplied here by host @@ -529,7 +536,7 @@ nvme_rdma_connect(struct nvme_rdma_qpair *rqpair) replaced. */ conn_param.responder_resources = 1; /* 0 or 1*/ - conn_param.initiator_depth = rqpair->max_queue_depth; + conn_param.initiator_depth = nvme_min(rqpair->max_queue_depth, attr.max_qp_init_rd_atom); conn_param.retry_count = 7; conn_param.rnr_retry_count = 7;