public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
From: Bart Van Assche <bart.vanassche@sandisk.com>
To: "Martin K . Petersen" <martin.petersen@oracle.com>,
	James Bottomley <James.Bottomley@HansenPartnership.com>
Cc: linux-scsi@vger.kernel.org, linux-block@vger.kernel.org,
	Bart Van Assche <bart.vanassche@sandisk.com>,
	Christoph Hellwig <hch@lst.de>, Hannes Reinecke <hare@suse.com>,
	Johannes Thumshirn <jthumshirn@suse.de>
Subject: [PATCH 07/31] scsi: Use blk_mq_rq_to_pdu() to convert a request to a SCSI command pointer
Date: Tue, 23 May 2017 17:33:56 -0700	[thread overview]
Message-ID: <20170524003420.5381-8-bart.vanassche@sandisk.com> (raw)
In-Reply-To: <20170524003420.5381-1-bart.vanassche@sandisk.com>

Since commit e9c787e65c0c ("scsi: allocate scsi_cmnd structures as
part of struct request") struct request and struct scsi_cmnd are
adjacent. This means that there is now an alternative to reading
req->special to convert a pointer to a prepared request into a
SCSI command pointer, namely by using blk_mq_rq_to_pdu(). Make
this change where appropriate. Although this patch does not
change any functionality, it slightly improves performance and
slightly improves readability.

Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.com>
Cc: Johannes Thumshirn <jthumshirn@suse.de>
---
 drivers/scsi/scsi_error.c |  2 +-
 drivers/scsi/scsi_lib.c   | 18 +++++++++---------
 include/scsi/scsi_tcq.h   |  2 +-
 3 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 19cafa3efb17..7ba5f988426c 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -265,7 +265,7 @@ void scsi_eh_scmd_add(struct scsi_cmnd *scmd)
  */
 enum blk_eh_timer_return scsi_times_out(struct request *req)
 {
-	struct scsi_cmnd *scmd = req->special;
+	struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req);
 	enum blk_eh_timer_return rtn = BLK_EH_NOT_HANDLED;
 	struct Scsi_Host *host = scmd->device->host;
 
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 5c6874cf4388..30a7900d331c 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -637,7 +637,7 @@ static void scsi_release_bidi_buffers(struct scsi_cmnd *cmd)
 static bool scsi_end_request(struct request *req, int error,
 		unsigned int bytes, unsigned int bidi_bytes)
 {
-	struct scsi_cmnd *cmd = req->special;
+	struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
 	struct scsi_device *sdev = cmd->device;
 	struct request_queue *q = sdev->request_queue;
 
@@ -1156,7 +1156,7 @@ void scsi_init_command(struct scsi_device *dev, struct scsi_cmnd *cmd)
 
 static int scsi_setup_scsi_cmnd(struct scsi_device *sdev, struct request *req)
 {
-	struct scsi_cmnd *cmd = req->special;
+	struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
 
 	/*
 	 * Passthrough requests may transfer data, in which case they must
@@ -1187,7 +1187,7 @@ static int scsi_setup_scsi_cmnd(struct scsi_device *sdev, struct request *req)
  */
 static int scsi_setup_fs_cmnd(struct scsi_device *sdev, struct request *req)
 {
-	struct scsi_cmnd *cmd = req->special;
+	struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
 
 	if (unlikely(sdev->handler && sdev->handler->prep_fn)) {
 		int ret = sdev->handler->prep_fn(sdev, req);
@@ -1202,7 +1202,7 @@ static int scsi_setup_fs_cmnd(struct scsi_device *sdev, struct request *req)
 
 static int scsi_setup_cmnd(struct scsi_device *sdev, struct request *req)
 {
-	struct scsi_cmnd *cmd = req->special;
+	struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
 
 	if (!blk_rq_bytes(req))
 		cmd->sc_data_direction = DMA_NONE;
@@ -1339,7 +1339,7 @@ static int scsi_prep_fn(struct request_queue *q, struct request *req)
 
 static void scsi_unprep_fn(struct request_queue *q, struct request *req)
 {
-	scsi_uninit_cmd(req->special);
+	scsi_uninit_cmd(blk_mq_rq_to_pdu(req));
 }
 
 /*
@@ -1530,7 +1530,7 @@ static int scsi_lld_busy(struct request_queue *q)
  */
 static void scsi_kill_request(struct request *req, struct request_queue *q)
 {
-	struct scsi_cmnd *cmd = req->special;
+	struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
 	struct scsi_device *sdev;
 	struct scsi_target *starget;
 	struct Scsi_Host *shost;
@@ -1561,7 +1561,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q)
 
 static void scsi_softirq_done(struct request *rq)
 {
-	struct scsi_cmnd *cmd = rq->special;
+	struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq);
 	unsigned long wait_for = (cmd->allowed + 1) * rq->timeout;
 	int disposition;
 
@@ -1749,8 +1749,8 @@ static void scsi_request_fn(struct request_queue *q)
 			blk_start_request(req);
 
 		spin_unlock_irq(q->queue_lock);
-		cmd = req->special;
-		if (unlikely(cmd == NULL)) {
+		cmd = blk_mq_rq_to_pdu(req);
+		if (cmd != req->special) {
 			printk(KERN_CRIT "impossible request in %s.\n"
 					 "please mail a stack trace to "
 					 "linux-scsi@vger.kernel.org\n",
diff --git a/include/scsi/scsi_tcq.h b/include/scsi/scsi_tcq.h
index 4416b1026189..5b416debf101 100644
--- a/include/scsi/scsi_tcq.h
+++ b/include/scsi/scsi_tcq.h
@@ -39,7 +39,7 @@ static inline struct scsi_cmnd *scsi_host_find_tag(struct Scsi_Host *shost,
 
 	if (!req)
 		return NULL;
-	return req->special;
+	return blk_mq_rq_to_pdu(req);
 }
 
 #endif /* CONFIG_BLOCK */
-- 
2.12.2

  parent reply	other threads:[~2017-05-24  0:33 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-24  0:33 [PATCH 00/31] SCSI patches for kernel v4.13 Bart Van Assche
2017-05-24  0:33 ` [PATCH 01/31] Split scsi_internal_device_block() Bart Van Assche
2017-05-24  5:48   ` Hannes Reinecke
2017-05-24  7:36   ` Johannes Thumshirn
2017-05-24  0:33 ` [PATCH 02/31] Create two versions of scsi_internal_device_unblock() Bart Van Assche
2017-05-24  5:48   ` Hannes Reinecke
2017-05-24  7:38   ` Johannes Thumshirn
2017-05-24  0:33 ` [PATCH 03/31] Protect SCSI device state changes with a mutex Bart Van Assche
2017-05-24  5:51   ` Hannes Reinecke
2017-05-24 15:10     ` Bart Van Assche
2017-05-24  0:33 ` [PATCH 04/31] Introduce scsi_start_queue() Bart Van Assche
2017-05-24  5:51   ` Hannes Reinecke
2017-05-24  0:33 ` [PATCH 05/31] Make __scsi_remove_device go straight from BLOCKED to DEL Bart Van Assche
2017-05-24  5:52   ` Hannes Reinecke
2017-05-24  0:33 ` [PATCH 06/31] scmd_eh_abort_handler(): Add a comment Bart Van Assche
2017-05-24  5:53   ` Hannes Reinecke
2017-05-24  0:33 ` Bart Van Assche [this message]
2017-05-24  5:54   ` [PATCH 07/31] scsi: Use blk_mq_rq_to_pdu() to convert a request to a SCSI command pointer Hannes Reinecke
2017-05-24  7:50   ` Johannes Thumshirn
2017-05-24  0:33 ` [PATCH 08/31] sd, sr: Convert two assignments into warning statements Bart Van Assche
2017-05-24  5:55   ` Hannes Reinecke
2017-05-24  7:52   ` Johannes Thumshirn
2017-05-24  0:33 ` [PATCH 09/31] block: Avoid that blk_exit_rl() triggers a use-after-free Bart Van Assche
2017-05-24  5:55   ` Hannes Reinecke
2017-05-24 15:09   ` Tejun Heo
2017-05-24  0:33 ` [PATCH 10/31] Avoid that scsi_exit_rq() " Bart Van Assche
2017-05-24  5:58   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 11/31] block: Introduce queue flag QUEUE_FLAG_SCSI_SUP Bart Van Assche
2017-05-24  6:01   ` Hannes Reinecke
2017-05-24 15:05     ` Bart Van Assche
2017-05-24  0:34 ` [PATCH 12/31] bsg: Check queue type before attaching to a queue Bart Van Assche
2017-05-24  6:01   ` Hannes Reinecke
2017-05-25  2:01   ` Martin K. Petersen
2017-05-24  0:34 ` [PATCH 13/31] pktcdvd: " Bart Van Assche
2017-05-24  6:02   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 14/31] cdrom: Check private request size " Bart Van Assche
2017-05-24  6:02   ` Hannes Reinecke
     [not found] ` <20170524003420.5381-1-bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2017-05-24  0:34   ` [PATCH 15/31] nfsd: Check private request size before submitting a SCSI request Bart Van Assche
     [not found]     ` <20170524003420.5381-16-bart.vanassche-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org>
2017-05-24  6:02       ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 16/31] scsi: Make scsi_ioctl_reset() pass the request queue pointer to blk_rq_init() Bart Van Assche
2017-05-24  6:03   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 17/31] block: Introduce request_queue.initialize_rq_fn() Bart Van Assche
2017-05-24  6:04   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 18/31] block: Make scsi_req_init() calls implicit Bart Van Assche
2017-05-24  6:05   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 19/31] scsi: Change argument type of scsi_req_init() Bart Van Assche
2017-05-24  6:06   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 20/31] scsi: Only add commands to the device command list if required by the LLD Bart Van Assche
2017-05-24  6:07   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 21/31] scsi: Move most of scsi_init_command() into scsi_initialize_rq() Bart Van Assche
2017-05-24  6:09   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 22/31] scsi: Inline scsi_init_command() Bart Van Assche
2017-05-24  6:09   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 23/31] scsi: Move sense buffer pointer initialization into scsi_initialize_rq() Bart Van Assche
2017-05-24  6:10   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 24/31] scsi: Make scsi_initialize_rq() zero the entire struct scsi_cmnd Bart Van Assche
2017-05-24  6:10   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 25/31] scsi-mq: Make behavior scsi_mq_prep_fn() closer to that of scsi_prep_fn() Bart Van Assche
2017-05-24  6:11   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 26/31] scsi: Move the code for clearing private command data into scsi_dispatch_cmd() Bart Van Assche
2017-05-24  6:12   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 27/31] scsi: Consolidate more initialization code Bart Van Assche
2017-05-24  6:13   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 28/31] scsi_setup_fs_cmnd(): Call scsi_req_init() instead of open-coding it Bart Van Assche
2017-05-24  6:13   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 29/31] scsi: snic: Remove code that zeroes driver-private command data Bart Van Assche
2017-05-24  6:14   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 30/31] scsi: virtio: " Bart Van Assche
2017-05-24  6:14   ` Hannes Reinecke
2017-05-24  0:34 ` [PATCH 31/31] xen/scsifront: " Bart Van Assche
2017-05-24  6:14   ` Hannes Reinecke
2017-05-24  7:02   ` Juergen Gross
2017-05-24  2:31 ` [PATCH 00/31] SCSI patches for kernel v4.13 Martin K. Petersen
2017-05-24  3:55 ` Jens Axboe
2017-05-24  4:43   ` Bart Van Assche
2017-05-25  2:04 ` Martin K. Petersen
2017-06-01 14:08   ` Bart Van Assche
2017-06-01 14:09     ` Christoph Hellwig

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=20170524003420.5381-8-bart.vanassche@sandisk.com \
    --to=bart.vanassche@sandisk.com \
    --cc=James.Bottomley@HansenPartnership.com \
    --cc=hare@suse.com \
    --cc=hch@lst.de \
    --cc=jthumshirn@suse.de \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.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