From c9b2dfa070ccec5bdc20edd2ea3e0431f6a3e630 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sun, 8 Jan 2017 21:10:32 +0000 Subject: [PATCH 1/4] ib_srpt: Remove a local variable git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@7086 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- srpt/src/ib_srpt.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/srpt/src/ib_srpt.c b/srpt/src/ib_srpt.c index 426c5aaf4..fe23cb995 100644 --- a/srpt/src/ib_srpt.c +++ b/srpt/src/ib_srpt.c @@ -950,7 +950,6 @@ static int srpt_post_recv(struct srpt_device *sdev, struct srpt_rdma_ch *ch, { struct ib_sge list; struct ib_recv_wr wr, *bad_wr; - int status; BUG_ON(!sdev); wr.wr_id = encode_wr_id(SRPT_RECV, ioctx->ioctx.index); @@ -964,10 +963,9 @@ static int srpt_post_recv(struct srpt_device *sdev, struct srpt_rdma_ch *ch, wr.num_sge = 1; if (sdev->use_srq) - status = ib_post_srq_recv(sdev->srq, &wr, &bad_wr); + return ib_post_srq_recv(sdev->srq, &wr, &bad_wr); else - status = ib_post_recv(ch->qp, &wr, &bad_wr); - return status; + return ib_post_recv(ch->qp, &wr, &bad_wr); } static int srpt_adjust_sq_wr_avail(struct srpt_rdma_ch *ch, int delta) From db686530c91ed1d5349c42a8b5230f1390f40551 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sun, 8 Jan 2017 21:10:54 +0000 Subject: [PATCH 2/4] ib_srpt: Rename a symbolic constant git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@7087 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- srpt/src/ib_srpt.c | 4 ++-- srpt/src/ib_srpt.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/srpt/src/ib_srpt.c b/srpt/src/ib_srpt.c index fe23cb995..4bfe718d4 100644 --- a/srpt/src/ib_srpt.c +++ b/srpt/src/ib_srpt.c @@ -479,7 +479,7 @@ static void srpt_get_ioc(struct srpt_port *sport, u32 slot, if (sdev->use_srq) send_queue_depth = sdev->srq_size; else - send_queue_depth = min(SRPT_RQ_SIZE, sdev->dev_attr.max_qp_wr); + send_queue_depth = min(MAX_SRPT_RQ_SIZE, sdev->dev_attr.max_qp_wr); memset(iocp, 0, sizeof(*iocp)); mutex_lock(&sport->mutex); @@ -2637,7 +2637,7 @@ static int srpt_cm_req_recv(struct srpt_device *const sdev, * Avoid QUEUE_FULL conditions by limiting the number of buffers used * for the SRP protocol to the SCST SCSI command queue size. */ - ch->rq_size = min(SRPT_RQ_SIZE, scst_get_max_lun_commands(NULL, 0)); + ch->rq_size = min(MAX_SRPT_RQ_SIZE, scst_get_max_lun_commands(NULL, 0)); spin_lock_init(&ch->spinlock); ch->state = CH_CONNECTING; INIT_LIST_HEAD(&ch->cmd_wait_list); diff --git a/srpt/src/ib_srpt.h b/srpt/src/ib_srpt.h index 5ff8869dc..05314d8a0 100644 --- a/srpt/src/ib_srpt.h +++ b/srpt/src/ib_srpt.h @@ -120,7 +120,7 @@ enum { MIN_SRPT_SQ_SIZE = 16, DEF_SRPT_SQ_SIZE = 256, - SRPT_RQ_SIZE = 128, + MAX_SRPT_RQ_SIZE = 128, MIN_SRPT_SRQ_SIZE = 4, DEFAULT_SRPT_SRQ_SIZE = 4095, MAX_SRPT_SRQ_SIZE = 65535, From 3abcc849df96847e752137f9a0f6cf5784e8e6ce Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sun, 8 Jan 2017 21:45:39 +0000 Subject: [PATCH 3/4] ib_srpt: Destroy SRQ before freeing the buffers posted on the SRQ git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@7088 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- srpt/src/ib_srpt.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/srpt/src/ib_srpt.c b/srpt/src/ib_srpt.c index 4bfe718d4..3f2acf56e 100644 --- a/srpt/src/ib_srpt.c +++ b/srpt/src/ib_srpt.c @@ -4478,11 +4478,11 @@ out: err_cm: ib_destroy_cm_id(sdev->cm_id); err_ring: + if (sdev->use_srq) + ib_destroy_srq(sdev->srq); srpt_free_ioctx_ring((struct srpt_ioctx **)sdev->ioctx_ring, sdev, sdev->srq_size, srp_max_req_size, DMA_FROM_DEVICE); - if (sdev->use_srq) - ib_destroy_srq(sdev->srq); err_mr: #ifndef IB_PD_HAS_LOCAL_DMA_LKEY ib_dereg_mr(sdev->mr); @@ -4553,12 +4553,10 @@ static void srpt_remove_one(struct ib_device *device, void *client_data) } } - srpt_free_ioctx_ring((struct srpt_ioctx **)sdev->ioctx_ring, sdev, - sdev->srq_size, srp_max_req_size, DMA_FROM_DEVICE); - sdev->ioctx_ring = NULL; - if (sdev->use_srq) ib_destroy_srq(sdev->srq); + srpt_free_ioctx_ring((struct srpt_ioctx **)sdev->ioctx_ring, sdev, + sdev->srq_size, srp_max_req_size, DMA_FROM_DEVICE); #ifndef IB_PD_HAS_LOCAL_DMA_LKEY ib_dereg_mr(sdev->mr); #endif From b51c624855e31116cc5eefc1d34c45c6aedb4321 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Sun, 8 Jan 2017 21:46:20 +0000 Subject: [PATCH 4/4] ib_srpt: Only report that SRQ creation failed if it was attempted to create an SRQ git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@7089 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- srpt/src/ib_srpt.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/srpt/src/ib_srpt.c b/srpt/src/ib_srpt.c index 3f2acf56e..0ebde4e06 100644 --- a/srpt/src/ib_srpt.c +++ b/srpt/src/ib_srpt.c @@ -4378,9 +4378,11 @@ static void srpt_add_one(struct ib_device *device) sdev->srq = use_srq ? ib_create_srq(sdev->pd, &srq_attr) : ERR_PTR(-ENOTSUPP); if (IS_ERR(sdev->srq)) { - pr_debug("ib_create_srq() failed: %ld\n", PTR_ERR(sdev->srq)); + if (use_srq) + pr_debug("ib_create_srq() failed: %ld\n", + PTR_ERR(sdev->srq)); - /* SRQ not supported. */ + /* SRQ disabled or not supported. */ sdev->use_srq = false; } else { pr_debug("create SRQ #wr= %d max_allow=%d dev= %s\n",