linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Bart Van Assche <bvanassche@acm.org>
To: Christoph Hellwig <hch@infradead.org>
Cc: Jens Axboe <axboe@kernel.dk>, Sagi Grimberg <sagig@mellanox.com>,
	Sebastian Parschauer <sebastian.riemer@profitbricks.com>,
	Robert Elliott <Elliott@hp.com>,
	Ming Lei <ming.lei@canonical.com>,
	"linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
	linux-rdma <linux-rdma@vger.kernel.org>
Subject: [PATCH v2 10/12] IB/srp: Use block layer tags
Date: Tue, 07 Oct 2014 15:06:31 +0200	[thread overview]
Message-ID: <5433E557.3010505@acm.org> (raw)
In-Reply-To: <5433E43D.3010107@acm.org>

Since the block layer already contains functionality to assign
a tag to each request, use that functionality instead of
reimplementing that functionality in the SRP initiator driver.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Cc: Sagi Grimberg <sagig@mellanox.com>
Cc: Sebastian Parschauer <sebastian.riemer@profitbricks.com>
---
 drivers/infiniband/ulp/srp/ib_srp.c | 30 +++++++++++++++++++++++++-----
 drivers/infiniband/ulp/srp/ib_srp.h |  1 -
 2 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index cc0bf83b..224ef25 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -853,7 +853,6 @@ static int srp_alloc_req_data(struct srp_rdma_ch *ch)
 			goto out;
 
 		req->indirect_dma_addr = dma_addr;
-		req->index = i;
 		list_add_tail(&req->list, &ch->free_reqs);
 	}
 	ret = 0;
@@ -1648,8 +1647,11 @@ static void srp_process_rsp(struct srp_rdma_ch *ch, struct srp_rsp *rsp)
 			ch->tsk_mgmt_status = rsp->data[3];
 		complete(&ch->tsk_mgmt_done);
 	} else {
-		req = &ch->req_ring[rsp->tag];
-		scmnd = srp_claim_req(ch, req, NULL, NULL);
+		scmnd = scsi_host_find_tag(target->scsi_host, rsp->tag);
+		if (scmnd) {
+			req = (void *)scmnd->host_scribble;
+			scmnd = srp_claim_req(ch, req, NULL, scmnd);
+		}
 		if (!scmnd) {
 			shost_printk(KERN_ERR, target->scsi_host,
 				     "Null scmnd for RSP w/tag %016llx\n",
@@ -1889,6 +1891,7 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
 	struct srp_cmd *cmd;
 	struct ib_device *dev;
 	unsigned long flags;
+	u32 tag;
 	int len, ret;
 	const bool in_scsi_eh = !in_interrupt() && current == shost->ehandler;
 
@@ -1905,6 +1908,7 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
 	if (unlikely(scmnd->result))
 		goto err;
 
+	tag = blk_mq_unique_tag(scmnd->request);
 	ch = &target->ch;
 
 	spin_lock_irqsave(&ch->lock, flags);
@@ -1927,7 +1931,7 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
 
 	cmd->opcode = SRP_CMD;
 	cmd->lun    = cpu_to_be64((u64) scmnd->device->lun << 48);
-	cmd->tag    = req->index;
+	cmd->tag    = tag;
 	memcpy(cmd->cdb, scmnd->cmnd, scmnd->cmd_len);
 
 	req->scmnd    = scmnd;
@@ -2409,6 +2413,7 @@ static int srp_abort(struct scsi_cmnd *scmnd)
 {
 	struct srp_target_port *target = host_to_target(scmnd->device->host);
 	struct srp_request *req = (struct srp_request *) scmnd->host_scribble;
+	u32 tag;
 	struct srp_rdma_ch *ch;
 	int ret;
 
@@ -2417,7 +2422,8 @@ static int srp_abort(struct scsi_cmnd *scmnd)
 	ch = &target->ch;
 	if (!req || !srp_claim_req(ch, req, NULL, scmnd))
 		return SUCCESS;
-	if (srp_send_tsk_mgmt(ch, req->index, scmnd->device->lun,
+	tag = blk_mq_unique_tag(scmnd->request);
+	if (srp_send_tsk_mgmt(ch, tag, scmnd->device->lun,
 			      SRP_TSK_ABORT_TASK) == 0)
 		ret = SUCCESS;
 	else if (target->rport->state == SRP_RPORT_LOST)
@@ -2463,6 +2469,15 @@ static int srp_reset_host(struct scsi_cmnd *scmnd)
 	return srp_reconnect_rport(target->rport) == 0 ? SUCCESS : FAILED;
 }
 
+static int srp_slave_alloc(struct scsi_device *sdev)
+{
+	sdev->tagged_supported = 1;
+
+	scsi_activate_tcq(sdev, sdev->queue_depth);
+
+	return 0;
+}
+
 static int srp_slave_configure(struct scsi_device *sdev)
 {
 	struct Scsi_Host *shost = sdev->host;
@@ -2641,6 +2656,7 @@ static struct scsi_host_template srp_template = {
 	.module				= THIS_MODULE,
 	.name				= "InfiniBand SRP initiator",
 	.proc_name			= DRV_NAME,
+	.slave_alloc			= srp_slave_alloc,
 	.slave_configure		= srp_slave_configure,
 	.info				= srp_target_info,
 	.queuecommand			= srp_queuecommand,
@@ -3076,6 +3092,10 @@ static ssize_t srp_create_target(struct device *dev,
 	if (ret)
 		goto err;
 
+	ret = scsi_init_shared_tag_map(target_host, target_host->can_queue);
+	if (ret)
+		goto err;
+
 	target->req_ring_size = target->queue_size - SRP_TSK_MGMT_SQ_SIZE;
 
 	if (!srp_conn_unique(target->srp_host, target)) {
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h b/drivers/infiniband/ulp/srp/ib_srp.h
index 74530d9..75e8f36 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.h
+++ b/drivers/infiniband/ulp/srp/ib_srp.h
@@ -127,7 +127,6 @@ struct srp_request {
 	struct srp_direct_buf  *indirect_desc;
 	dma_addr_t		indirect_dma_addr;
 	short			nmdesc;
-	short			index;
 };
 
 /**
-- 
1.8.4.5


  parent reply	other threads:[~2014-10-07 13:06 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-07 13:01 [PATCH v2 0/12] IB/srp: Add multichannel support Bart Van Assche
2014-10-07 13:03 ` [PATCH v2 02/12] blk-mq: Add blk_mq_unique_tag() Bart Van Assche
2014-10-11 11:08   ` Christoph Hellwig
2014-10-13  9:21     ` Bart Van Assche
     [not found]       ` <543B99B2.1010307-HInyCGIudOg@public.gmane.org>
2014-10-13 10:15         ` Christoph Hellwig
2014-10-19 16:14           ` Sagi Grimberg
     [not found]   ` <5433E493.9030304-HInyCGIudOg@public.gmane.org>
2014-10-28  1:55     ` Martin K. Petersen
2014-10-07 13:04 ` [PATCH v2 04/12] scsi_tcq.h: Add support for multiple hardware queues Bart Van Assche
2014-10-19 16:12   ` Sagi Grimberg
     [not found]     ` <5443E2DF.1040605-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2014-10-20 12:01       ` Bart Van Assche
     [not found]         ` <5444F995.5080407-HInyCGIudOg@public.gmane.org>
2014-10-21  8:49           ` Christoph Hellwig
2014-10-21  8:59             ` Sagi Grimberg
2014-10-28  2:06   ` Martin K. Petersen
2014-10-07 13:05 ` [PATCH v2 07/12] IB/srp: Avoid that I/O hangs due to a cable pull during LUN scanning Bart Van Assche
2014-10-19 16:27   ` Sagi Grimberg
     [not found]     ` <5443E66F.7050901-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2014-10-20 12:15       ` Bart Van Assche
2014-10-21  8:50         ` Christoph Hellwig
2014-10-07 13:05 ` [PATCH v2 08/12] IB/srp: Introduce two new srp_target_port member variables Bart Van Assche
2014-10-19 16:30   ` Sagi Grimberg
2014-10-07 13:06 ` Bart Van Assche [this message]
     [not found]   ` <5433E557.3010505-HInyCGIudOg@public.gmane.org>
2014-10-17 10:58     ` [PATCH v2 10/12] IB/srp: Use block layer tags Christoph Hellwig
     [not found]       ` <20141017105858.GA7819-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2014-10-20 11:44         ` Bart Van Assche
2014-10-22 22:03     ` Elliott, Robert (Server Storage)
     [not found]       ` <94D0CD8314A33A4D9D801C0FE68B4029593212E0-wwDBVnaDRpYSZAcGdq5asR6epYMZPwEe5NbjCUgZEJk@public.gmane.org>
2014-10-23  7:16         ` Bart Van Assche
2014-10-23 17:43           ` Webb Scales
     [not found]             ` <54493E5A.7050803-VXdhtT5mjnY@public.gmane.org>
2014-10-24  6:45               ` Bart Van Assche
     [not found]                 ` <5449F571.7080308-HInyCGIudOg@public.gmane.org>
2014-10-24 15:40                   ` Webb Scales
2014-10-23  8:47       ` Christoph Hellwig
2014-10-24  4:43         ` Elliott, Robert (Server Storage)
2014-10-24  6:45           ` Christoph Hellwig
     [not found]             ` <20141024064514.GA15654-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2014-10-31 17:34               ` Hannes Reinecke
2014-11-03  7:52             ` Kashyap Desai
2014-11-03  8:25               ` Christoph Hellwig
     [not found] ` <5433E43D.3010107-HInyCGIudOg@public.gmane.org>
2014-10-07 13:02   ` [PATCH v2 01/12] blk-mq: Use all available hardware queues Bart Van Assche
2014-10-07 14:37     ` Jens Axboe
     [not found]       ` <5433FA8F.3050100-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>
2014-10-08 13:21         ` Bart Van Assche
     [not found]           ` <54353A74.7040406-HInyCGIudOg@public.gmane.org>
2014-10-11 11:11             ` Christoph Hellwig
     [not found]               ` <20141011111114.GB9593-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2014-10-13  9:45                 ` Bart Van Assche
     [not found]                   ` <543B9F47.2090204-HInyCGIudOg@public.gmane.org>
2014-10-17 13:20                     ` Christoph Hellwig
     [not found]                       ` <20141017132053.GF16538-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2014-10-17 14:11                         ` Sagi Grimberg
2014-10-07 13:03   ` [PATCH v2 03/12] scsi-mq: Add support for multiple " Bart Van Assche
     [not found]     ` <5433E4AB.8030306-HInyCGIudOg@public.gmane.org>
2014-10-19 15:54       ` Sagi Grimberg
2014-10-28  2:01       ` Martin K. Petersen
2014-10-29 12:22         ` Bart Van Assche
2014-10-29 12:27           ` Bart Van Assche
     [not found]             ` <5450DD49.6090108-HInyCGIudOg@public.gmane.org>
2014-10-30  0:53               ` Martin K. Petersen
2014-10-07 13:04   ` [PATCH v2 05/12] IB/srp: Move ib_destroy_cm_id() call into srp_free_ch_ib() Bart Van Assche
2014-10-07 13:04   ` [PATCH v2 06/12] IB/srp: Remove stale connection retry mechanism Bart Van Assche
2014-10-07 13:05   ` [PATCH v2 09/12] IB/srp: Separate target and channel variables Bart Van Assche
2014-10-19 16:48     ` Sagi Grimberg
2014-10-07 13:06   ` [PATCH v2 11/12] IB/srp: Eliminate free_reqs list Bart Van Assche
     [not found]     ` <5433E56E.6010600-HInyCGIudOg@public.gmane.org>
2014-10-17 10:59       ` Christoph Hellwig
     [not found]         ` <20141017105939.GB7819-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2014-10-19 16:59           ` Sagi Grimberg
2014-10-20 11:47           ` Bart Van Assche
2014-10-21  8:49             ` Christoph Hellwig
2014-10-07 13:07 ` [PATCH v2 12/12] IB/srp: Add multichannel support Bart Van Assche
2014-10-17 11:01   ` EH action after scsi_remove_host, was: " Christoph Hellwig
2014-10-20 13:53     ` Bart Van Assche
2014-10-21  8:51       ` Christoph Hellwig
2014-10-17 11:06   ` Christoph Hellwig
     [not found]     ` <20141017110627.GD7819-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>
2014-10-20 11:57       ` Bart Van Assche
2014-10-21  8:49         ` Christoph Hellwig
     [not found]   ` <5433E585.607-HInyCGIudOg@public.gmane.org>
2014-10-19 17:36     ` Sagi Grimberg
2014-10-20 12:56       ` Bart Van Assche
     [not found]         ` <54450690.709-HInyCGIudOg@public.gmane.org>
2014-10-21  9:10           ` Sagi Grimberg
     [not found]             ` <544622FE.5040906-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2014-10-28 18:32               ` Sagi Grimberg
     [not found]                 ` <544FE13A.60807-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2014-10-29 10:52                   ` Bart Van Assche
2014-10-30 14:19                     ` Sagi Grimberg
2014-10-30 14:36                       ` Bart Van Assche
     [not found]                         ` <54524D08.4040203-HInyCGIudOg@public.gmane.org>
2014-10-30 15:06                           ` Sagi Grimberg
     [not found]                             ` <545253E3.7000009-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2014-10-30 15:19                               ` Bart Van Assche
     [not found]                                 ` <545256E5.9010501-HInyCGIudOg@public.gmane.org>
2014-10-30 17:33                                   ` Sagi Grimberg
2014-10-31  9:19                                     ` Bart Van Assche
     [not found]                                       ` <5453541D.7040206-HInyCGIudOg@public.gmane.org>
2014-11-02 13:03                                         ` Sagi Grimberg
2014-11-03  1:46                                           ` Elliott, Robert (Server Storage)
2014-11-04 11:46                                             ` Bart Van Assche
     [not found]                                               ` <5458BC8B.40202-HInyCGIudOg@public.gmane.org>
2014-11-04 12:15                                                 ` Sagi Grimberg
     [not found]                                                   ` <5458C344.2040109-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2014-11-05  4:57                                                     ` Elliott, Robert (Server Storage)
     [not found]                                                       ` <94D0CD8314A33A4D9D801C0FE68B40295937104F-2m9nI20wMFwSZAcGdq5asR6epYMZPwEe5NbjCUgZEJk@public.gmane.org>
2014-11-05 11:22                                                         ` Sagi Grimberg
2014-10-21  9:14     ` Sagi Grimberg
2014-10-29 12:36       ` Bart Van Assche
2014-10-30 14:22         ` Sagi Grimberg

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5433E557.3010505@acm.org \
    --to=bvanassche@acm.org \
    --cc=Elliott@hp.com \
    --cc=axboe@kernel.dk \
    --cc=hch@infradead.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=ming.lei@canonical.com \
    --cc=sagig@mellanox.com \
    --cc=sebastian.riemer@profitbricks.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).