All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd
@ 2021-05-18 17:44 Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 01/50] core: Introduce the scsi_cmd_to_rq() function Bart Van Assche
                   ` (50 more replies)
  0 siblings, 51 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen; +Cc: linux-scsi, Bart Van Assche

Hi Martin,

This patch series implements the following two changes for all SCSI drivers:
- Use blk_mq_rq_from_pdu() instead of the request member of struct scsi_cmnd
  since adding an offset to a pointer is faster than pointer indirection.
- Remove the request pointer from struct scsi_cmnd.

Please consider this patch series for kernel v5.14.

Thanks,

Bart.

Changes compared to v1:
- Renamed blk_req() into scsi_cmd_to_rq().
- Added a few Acked-by tags.

Bart Van Assche (50):
  core: Introduce the scsi_cmd_to_rq() function
  core: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  sd: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  sr: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  scsi_transport_fc: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  scsi_transport_spi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  ata: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  RDMA/iser: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  RDMA/srp: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  zfcp: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  53c700: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  NCR5380: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  aacraid: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  advansys: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  bnx2i: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  csiostor: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  cxlflash: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  dpt_i2o: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  fnic: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  hisi_sas: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  hpsa: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  ibmvfc: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  ibmvscsi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  ips: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  libsas: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  lpfc: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  megaraid: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  mpt3sas: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  mvumi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  myrb: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  myrs: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  ncr53c8xx: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  qedf: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  qedi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  qla1280: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  qla2xxx: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  qla4xxx: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  qlogicpti: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  scsi_debug: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  smartpqi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  snic: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  stex: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  sun3_scsi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  sym53c8xx: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  ufs: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  virtio_scsi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  xen-scsifront: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  tcm_loop: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  usb-storage: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  core: Remove the request member from struct scsi_cmnd

 drivers/ata/libata-eh.c                     |  5 +-
 drivers/ata/libata-scsi.c                   | 10 ++--
 drivers/ata/pata_falcon.c                   |  4 +-
 drivers/infiniband/ulp/iser/iser_memory.c   |  2 +-
 drivers/infiniband/ulp/srp/ib_srp.c         |  6 +-
 drivers/s390/scsi/zfcp_fsf.c                |  2 +-
 drivers/scsi/53c700.c                       |  2 +-
 drivers/scsi/NCR5380.c                      |  6 +-
 drivers/scsi/aacraid/aachba.c               |  2 +-
 drivers/scsi/aacraid/commsup.c              |  2 +-
 drivers/scsi/advansys.c                     |  4 +-
 drivers/scsi/bnx2i/bnx2i_hwi.c              |  2 +-
 drivers/scsi/csiostor/csio_scsi.c           |  6 +-
 drivers/scsi/cxlflash/main.c                |  2 +-
 drivers/scsi/dpt_i2o.c                      |  4 +-
 drivers/scsi/fnic/fnic_scsi.c               | 49 ++++++++--------
 drivers/scsi/hisi_sas/hisi_sas_main.c       |  4 +-
 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c      |  2 +-
 drivers/scsi/hpsa.c                         |  6 +-
 drivers/scsi/ibmvscsi/ibmvfc.c              |  2 +-
 drivers/scsi/ibmvscsi/ibmvscsi.c            |  2 +-
 drivers/scsi/ips.c                          |  2 +-
 drivers/scsi/libsas/sas_ata.c               |  2 +-
 drivers/scsi/libsas/sas_scsi_host.c         |  2 +-
 drivers/scsi/lpfc/lpfc_scsi.c               | 63 ++++++++++-----------
 drivers/scsi/megaraid/megaraid_sas_base.c   |  4 +-
 drivers/scsi/megaraid/megaraid_sas_fusion.c | 10 ++--
 drivers/scsi/mpt3sas/mpt3sas_base.c         |  4 +-
 drivers/scsi/mpt3sas/mpt3sas_scsih.c        |  6 +-
 drivers/scsi/mvumi.c                        |  2 +-
 drivers/scsi/myrb.c                         | 11 ++--
 drivers/scsi/myrs.c                         | 11 ++--
 drivers/scsi/ncr53c8xx.c                    |  4 +-
 drivers/scsi/qedf/qedf_io.c                 |  8 +--
 drivers/scsi/qedi/qedi_fw.c                 |  9 +--
 drivers/scsi/qla1280.c                      |  6 +-
 drivers/scsi/qla2xxx/qla_os.c               |  4 +-
 drivers/scsi/qla4xxx/ql4_iocb.c             |  2 +-
 drivers/scsi/qla4xxx/ql4_os.c               |  4 +-
 drivers/scsi/qlogicpti.c                    |  2 +-
 drivers/scsi/scsi.c                         |  2 +-
 drivers/scsi/scsi_debug.c                   | 13 +++--
 drivers/scsi/scsi_error.c                   | 15 +++--
 drivers/scsi/scsi_lib.c                     | 29 +++++-----
 drivers/scsi/scsi_logging.c                 | 18 +++---
 drivers/scsi/scsi_transport_fc.c            |  2 +-
 drivers/scsi/scsi_transport_spi.c           |  2 +-
 drivers/scsi/sd.c                           | 33 +++++------
 drivers/scsi/sd_zbc.c                       | 10 ++--
 drivers/scsi/smartpqi/smartpqi_init.c       |  4 +-
 drivers/scsi/snic/snic_scsi.c               | 10 ++--
 drivers/scsi/sr.c                           | 13 ++---
 drivers/scsi/stex.c                         |  6 +-
 drivers/scsi/sun3_scsi.c                    |  2 +-
 drivers/scsi/sym53c8xx_2/sym_glue.c         |  4 +-
 drivers/scsi/ufs/ufshcd.c                   | 28 ++++-----
 drivers/scsi/virtio_scsi.c                  |  4 +-
 drivers/scsi/xen-scsifront.c                |  2 +-
 drivers/target/loopback/tcm_loop.c          |  4 +-
 drivers/usb/storage/transport.c             |  2 +-
 include/scsi/scsi_cmnd.h                    | 15 +++--
 include/scsi/scsi_device.h                  | 16 +++---
 62 files changed, 255 insertions(+), 259 deletions(-)


^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 01/50] core: Introduce the scsi_cmd_to_rq() function
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 02/50] core: Use scsi_cmd_to_rq() instead of scsi_cmnd.request Bart Van Assche
                   ` (49 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Christoph Hellwig, Hannes Reinecke,
	Ming Lei, James E.J. Bottomley

The 'request' member of struct scsi_cmnd is superfluous. The struct
request and struct scsi_cmnd data structures are adjacent and hence the
request pointer can be derived easily from a scsi_cmnd pointer. Introduce
a helper function that performs that conversion in a type-safe way. This
patch is the first step towards removing the request member from struct
scsi_cmnd. Making that change has the following advantages:
- This is a performance optimization since adding an offset to a pointer
  takes less time than dereferencing a pointer.
- struct scsi_cmnd becomes smaller.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 include/scsi/scsi_cmnd.h | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
index fed024f4c02a..6787670d0d16 100644
--- a/include/scsi/scsi_cmnd.h
+++ b/include/scsi/scsi_cmnd.h
@@ -146,6 +146,12 @@ struct scsi_cmnd {
 	unsigned int extra_len;	/* length of alignment and padding */
 };
 
+/* Variant of blk_mq_rq_from_pdu() that verifies the type of its argument. */
+static inline struct request *scsi_cmd_to_rq(struct scsi_cmnd *scmd)
+{
+	return blk_mq_rq_from_pdu(scmd);
+}
+
 /*
  * Return the driver private allocation behind the command.
  * Only works if cmd_size is set in the host template.

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 02/50] core: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 01/50] core: Introduce the scsi_cmd_to_rq() function Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 20:01   ` Douglas Gilbert
  2021-05-18 17:44 ` [PATCH v2 03/50] sd: " Bart Van Assche
                   ` (48 subsequent siblings)
  50 siblings, 1 reply; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Christoph Hellwig, Hannes Reinecke,
	Ming Lei, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/scsi.c         |  2 +-
 drivers/scsi/scsi_error.c   | 14 +++++++-------
 drivers/scsi/scsi_lib.c     | 28 +++++++++++++++-------------
 drivers/scsi/scsi_logging.c | 18 ++++++++++--------
 include/scsi/scsi_cmnd.h    |  6 ++++--
 include/scsi/scsi_device.h  | 16 +++++++++-------
 6 files changed, 46 insertions(+), 38 deletions(-)

diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
index e9e2f0e15ac8..7d545223dd59 100644
--- a/drivers/scsi/scsi.c
+++ b/drivers/scsi/scsi.c
@@ -197,7 +197,7 @@ void scsi_finish_command(struct scsi_cmnd *cmd)
 				"(result %x)\n", cmd->result));
 
 	good_bytes = scsi_bufflen(cmd);
-	if (!blk_rq_is_passthrough(cmd->request)) {
+	if (!blk_rq_is_passthrough(scsi_cmd_to_rq(cmd))) {
 		int old_good_bytes = good_bytes;
 		drv = scsi_cmd_to_driver(cmd);
 		if (drv->done)
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index d8fafe77dbbe..5af6d87e83aa 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -242,7 +242,7 @@ scsi_abort_command(struct scsi_cmnd *scmd)
  */
 static void scsi_eh_reset(struct scsi_cmnd *scmd)
 {
-	if (!blk_rq_is_passthrough(scmd->request)) {
+	if (!blk_rq_is_passthrough(scsi_cmd_to_rq(scmd))) {
 		struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd);
 		if (sdrv->eh_reset)
 			sdrv->eh_reset(scmd);
@@ -1188,7 +1188,7 @@ static enum scsi_disposition scsi_request_sense(struct scsi_cmnd *scmd)
 static enum scsi_disposition
 scsi_eh_action(struct scsi_cmnd *scmd, enum scsi_disposition rtn)
 {
-	if (!blk_rq_is_passthrough(scmd->request)) {
+	if (!blk_rq_is_passthrough(scsi_cmd_to_rq(scmd))) {
 		struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd);
 		if (sdrv->eh_action)
 			rtn = sdrv->eh_action(scmd, rtn);
@@ -1762,16 +1762,16 @@ int scsi_noretry_cmd(struct scsi_cmnd *scmd)
 	case DID_TIME_OUT:
 		goto check_type;
 	case DID_BUS_BUSY:
-		return (scmd->request->cmd_flags & REQ_FAILFAST_TRANSPORT);
+		return scsi_cmd_to_rq(scmd)->cmd_flags & REQ_FAILFAST_TRANSPORT;
 	case DID_PARITY:
-		return (scmd->request->cmd_flags & REQ_FAILFAST_DEV);
+		return scsi_cmd_to_rq(scmd)->cmd_flags & REQ_FAILFAST_DEV;
 	case DID_ERROR:
 		if (msg_byte(scmd->result) == COMMAND_COMPLETE &&
 		    status_byte(scmd->result) == RESERVATION_CONFLICT)
 			return 0;
 		fallthrough;
 	case DID_SOFT_ERROR:
-		return (scmd->request->cmd_flags & REQ_FAILFAST_DRIVER);
+		return scsi_cmd_to_rq(scmd)->cmd_flags & REQ_FAILFAST_DRIVER;
 	}
 
 	if (status_byte(scmd->result) != CHECK_CONDITION)
@@ -1782,8 +1782,8 @@ int scsi_noretry_cmd(struct scsi_cmnd *scmd)
 	 * assume caller has checked sense and determined
 	 * the check condition was retryable.
 	 */
-	if (scmd->request->cmd_flags & REQ_FAILFAST_DEV ||
-	    blk_rq_is_passthrough(scmd->request))
+	if (scsi_cmd_to_rq(scmd)->cmd_flags & REQ_FAILFAST_DEV ||
+	    blk_rq_is_passthrough(scsi_cmd_to_rq(scmd)))
 		return 1;
 
 	return 0;
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 532304d42f00..2e9598c91cee 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -119,13 +119,15 @@ scsi_set_blocked(struct scsi_cmnd *cmd, int reason)
 
 static void scsi_mq_requeue_cmd(struct scsi_cmnd *cmd)
 {
-	if (cmd->request->rq_flags & RQF_DONTPREP) {
-		cmd->request->rq_flags &= ~RQF_DONTPREP;
+	struct request *rq = scsi_cmd_to_rq(cmd);
+
+	if (rq->rq_flags & RQF_DONTPREP) {
+		rq->rq_flags &= ~RQF_DONTPREP;
 		scsi_mq_uninit_cmd(cmd);
 	} else {
 		WARN_ON_ONCE(true);
 	}
-	blk_mq_requeue_request(cmd->request, true);
+	blk_mq_requeue_request(rq, true);
 }
 
 /**
@@ -164,7 +166,7 @@ static void __scsi_queue_insert(struct scsi_cmnd *cmd, int reason, bool unbusy)
 	 */
 	cmd->result = 0;
 
-	blk_mq_requeue_request(cmd->request, true);
+	blk_mq_requeue_request(scsi_cmd_to_rq(cmd), true);
 }
 
 /**
@@ -475,7 +477,7 @@ void scsi_run_host_queues(struct Scsi_Host *shost)
 
 static void scsi_uninit_cmd(struct scsi_cmnd *cmd)
 {
-	if (!blk_rq_is_passthrough(cmd->request)) {
+	if (!blk_rq_is_passthrough(scsi_cmd_to_rq(cmd))) {
 		struct scsi_driver *drv = scsi_cmd_to_driver(cmd);
 
 		if (drv->uninit_command)
@@ -626,7 +628,7 @@ static void scsi_io_completion_reprep(struct scsi_cmnd *cmd,
 
 static bool scsi_cmd_runtime_exceeced(struct scsi_cmnd *cmd)
 {
-	struct request *req = cmd->request;
+	struct request *req = scsi_cmd_to_rq(cmd);
 	unsigned long wait_for;
 
 	if (cmd->allowed == SCSI_CMD_RETRIES_NO_LIMIT)
@@ -645,7 +647,7 @@ static bool scsi_cmd_runtime_exceeced(struct scsi_cmnd *cmd)
 static void scsi_io_completion_action(struct scsi_cmnd *cmd, int result)
 {
 	struct request_queue *q = cmd->device->request_queue;
-	struct request *req = cmd->request;
+	struct request *req = scsi_cmd_to_rq(cmd);
 	int level = 0;
 	enum {ACTION_FAIL, ACTION_REPREP, ACTION_RETRY,
 	      ACTION_DELAYED_RETRY} action;
@@ -819,7 +821,7 @@ static int scsi_io_completion_nz_result(struct scsi_cmnd *cmd, int result,
 {
 	bool sense_valid;
 	bool sense_current = true;	/* false implies "deferred sense" */
-	struct request *req = cmd->request;
+	struct request *req = scsi_cmd_to_rq(cmd);
 	struct scsi_sense_hdr sshdr;
 
 	sense_valid = scsi_command_normalize_sense(cmd, &sshdr);
@@ -908,7 +910,7 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
 {
 	int result = cmd->result;
 	struct request_queue *q = cmd->device->request_queue;
-	struct request *req = cmd->request;
+	struct request *req = scsi_cmd_to_rq(cmd);
 	blk_status_t blk_stat = BLK_STS_OK;
 
 	if (unlikely(result))	/* a nz result may or may not be an error */
@@ -979,7 +981,7 @@ static inline bool scsi_cmd_needs_dma_drain(struct scsi_device *sdev,
 blk_status_t scsi_alloc_sgtables(struct scsi_cmnd *cmd)
 {
 	struct scsi_device *sdev = cmd->device;
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	unsigned short nr_segs = blk_rq_nr_phys_segments(rq);
 	struct scatterlist *last_sg = NULL;
 	blk_status_t ret;
@@ -1108,7 +1110,7 @@ void scsi_init_command(struct scsi_device *dev, struct scsi_cmnd *cmd)
 {
 	void *buf = cmd->sense_buffer;
 	void *prot = cmd->prot_sdb;
-	struct request *rq = blk_mq_rq_from_pdu(cmd);
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	unsigned int flags = cmd->flags & SCMD_PRESERVED_FLAGS;
 	unsigned long jiffies_at_alloc;
 	int retries, to_clear;
@@ -1573,12 +1575,12 @@ static blk_status_t scsi_prepare_cmd(struct request *req)
 
 static void scsi_mq_done(struct scsi_cmnd *cmd)
 {
-	if (unlikely(blk_should_fake_timeout(cmd->request->q)))
+	if (unlikely(blk_should_fake_timeout(scsi_cmd_to_rq(cmd)->q)))
 		return;
 	if (unlikely(test_and_set_bit(SCMD_STATE_COMPLETE, &cmd->state)))
 		return;
 	trace_scsi_dispatch_cmd_done(cmd);
-	blk_mq_complete_request(cmd->request);
+	blk_mq_complete_request(scsi_cmd_to_rq(cmd));
 }
 
 static void scsi_mq_put_budget(struct request_queue *q, int budget_token)
diff --git a/drivers/scsi/scsi_logging.c b/drivers/scsi/scsi_logging.c
index 8ea44c6595ef..f0ae55ad0973 100644
--- a/drivers/scsi/scsi_logging.c
+++ b/drivers/scsi/scsi_logging.c
@@ -28,8 +28,9 @@ static void scsi_log_release_buffer(char *bufptr)
 
 static inline const char *scmd_name(const struct scsi_cmnd *scmd)
 {
-	return scmd->request->rq_disk ?
-		scmd->request->rq_disk->disk_name : NULL;
+	struct request *rq = scsi_cmd_to_rq((struct scsi_cmnd *)scmd);
+
+	return rq->rq_disk ? rq->rq_disk->disk_name : NULL;
 }
 
 static size_t sdev_format_header(char *logbuf, size_t logbuf_len,
@@ -91,7 +92,7 @@ void scmd_printk(const char *level, const struct scsi_cmnd *scmd,
 	if (!logbuf)
 		return;
 	off = sdev_format_header(logbuf, logbuf_len, scmd_name(scmd),
-				 scmd->request->tag);
+				 scsi_cmd_to_rq((struct scsi_cmnd *)scmd)->tag);
 	if (off < logbuf_len) {
 		va_start(args, fmt);
 		off += vscnprintf(logbuf + off, logbuf_len - off, fmt, args);
@@ -188,7 +189,7 @@ void scsi_print_command(struct scsi_cmnd *cmd)
 		return;
 
 	off = sdev_format_header(logbuf, logbuf_len,
-				 scmd_name(cmd), cmd->request->tag);
+				 scmd_name(cmd), scsi_cmd_to_rq(cmd)->tag);
 	if (off >= logbuf_len)
 		goto out_printk;
 	off += scnprintf(logbuf + off, logbuf_len - off, "CDB: ");
@@ -210,7 +211,7 @@ void scsi_print_command(struct scsi_cmnd *cmd)
 
 			off = sdev_format_header(logbuf, logbuf_len,
 						 scmd_name(cmd),
-						 cmd->request->tag);
+						 scsi_cmd_to_rq(cmd)->tag);
 			if (!WARN_ON(off > logbuf_len - 58)) {
 				off += scnprintf(logbuf + off, logbuf_len - off,
 						 "CDB[%02x]: ", k);
@@ -373,7 +374,8 @@ EXPORT_SYMBOL(__scsi_print_sense);
 /* Normalize and print sense buffer in SCSI command */
 void scsi_print_sense(const struct scsi_cmnd *cmd)
 {
-	scsi_log_print_sense(cmd->device, scmd_name(cmd), cmd->request->tag,
+	scsi_log_print_sense(cmd->device, scmd_name(cmd),
+			     scsi_cmd_to_rq((struct scsi_cmnd *)cmd)->tag,
 			     cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE);
 }
 EXPORT_SYMBOL(scsi_print_sense);
@@ -392,8 +394,8 @@ void scsi_print_result(const struct scsi_cmnd *cmd, const char *msg,
 	if (!logbuf)
 		return;
 
-	off = sdev_format_header(logbuf, logbuf_len,
-				 scmd_name(cmd), cmd->request->tag);
+	off = sdev_format_header(logbuf, logbuf_len, scmd_name(cmd),
+				 scsi_cmd_to_rq((struct scsi_cmnd *)cmd)->tag);
 
 	if (off >= logbuf_len)
 		goto out_printk;
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
index 6787670d0d16..bd7f73f035be 100644
--- a/include/scsi/scsi_cmnd.h
+++ b/include/scsi/scsi_cmnd.h
@@ -164,7 +164,9 @@ static inline void *scsi_cmd_priv(struct scsi_cmnd *cmd)
 /* make sure not to use it with passthrough commands */
 static inline struct scsi_driver *scsi_cmd_to_driver(struct scsi_cmnd *cmd)
 {
-	return *(struct scsi_driver **)cmd->request->rq_disk->private_data;
+	struct request *rq = scsi_cmd_to_rq(cmd);
+
+	return *(struct scsi_driver **)rq->rq_disk->private_data;
 }
 
 extern void scsi_finish_command(struct scsi_cmnd *cmd);
@@ -290,7 +292,7 @@ static inline unsigned char scsi_get_prot_type(struct scsi_cmnd *scmd)
 
 static inline sector_t scsi_get_lba(struct scsi_cmnd *scmd)
 {
-	return blk_rq_pos(scmd->request);
+	return blk_rq_pos(scsi_cmd_to_rq(scmd));
 }
 
 static inline unsigned int scsi_prot_interval(struct scsi_cmnd *scmd)
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index ac6ab16abee7..09797a2b779d 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -265,13 +265,15 @@ sdev_prefix_printk(const char *, const struct scsi_device *, const char *,
 __printf(3, 4) void
 scmd_printk(const char *, const struct scsi_cmnd *, const char *, ...);
 
-#define scmd_dbg(scmd, fmt, a...)					   \
-	do {								   \
-		if ((scmd)->request->rq_disk)				   \
-			sdev_dbg((scmd)->device, "[%s] " fmt,		   \
-				 (scmd)->request->rq_disk->disk_name, ##a);\
-		else							   \
-			sdev_dbg((scmd)->device, fmt, ##a);		   \
+#define scmd_dbg(scmd, fmt, a...)				\
+	do {							\
+		struct request *rq = scsi_cmd_to_rq((scmd));	\
+								\
+		if (rq->rq_disk)				\
+			sdev_dbg((scmd)->device, "[%s] " fmt,	\
+				 rq->rq_disk->disk_name, ##a);	\
+		else						\
+			sdev_dbg((scmd)->device, fmt, ##a);	\
 	} while (0)
 
 enum scsi_target_state {

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 03/50] sd: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 01/50] core: Introduce the scsi_cmd_to_rq() function Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 02/50] core: Use scsi_cmd_to_rq() instead of scsi_cmnd.request Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 04/50] sr: " Bart Van Assche
                   ` (47 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Christoph Hellwig, Hannes Reinecke,
	Ming Lei, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/sd.c     | 33 +++++++++++++++++----------------
 drivers/scsi/sd_zbc.c | 10 +++++-----
 2 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index cb3c37d1e009..cb7f8a343b67 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -779,8 +779,9 @@ static unsigned int sd_prot_flag_mask(unsigned int prot_op)
 static unsigned char sd_setup_protect_cmnd(struct scsi_cmnd *scmd,
 					   unsigned int dix, unsigned int dif)
 {
-	struct bio *bio = scmd->request->bio;
-	unsigned int prot_op = sd_prot_op(rq_data_dir(scmd->request), dix, dif);
+	struct request *rq = scsi_cmd_to_rq(scmd);
+	struct bio *bio = rq->bio;
+	unsigned int prot_op = sd_prot_op(rq_data_dir(rq), dix, dif);
 	unsigned int protect = 0;
 
 	if (dix) {				/* DIX Type 0, 1, 2, 3 */
@@ -871,7 +872,7 @@ static void sd_config_discard(struct scsi_disk *sdkp, unsigned int mode)
 static blk_status_t sd_setup_unmap_cmnd(struct scsi_cmnd *cmd)
 {
 	struct scsi_device *sdp = cmd->device;
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
 	u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
 	u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
@@ -907,7 +908,7 @@ static blk_status_t sd_setup_write_same16_cmnd(struct scsi_cmnd *cmd,
 		bool unmap)
 {
 	struct scsi_device *sdp = cmd->device;
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
 	u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
 	u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
@@ -939,7 +940,7 @@ static blk_status_t sd_setup_write_same10_cmnd(struct scsi_cmnd *cmd,
 		bool unmap)
 {
 	struct scsi_device *sdp = cmd->device;
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
 	u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
 	u32 nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
@@ -969,7 +970,7 @@ static blk_status_t sd_setup_write_same10_cmnd(struct scsi_cmnd *cmd,
 
 static blk_status_t sd_setup_write_zeroes_cmnd(struct scsi_cmnd *cmd)
 {
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	struct scsi_device *sdp = cmd->device;
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
 	u64 lba = sectors_to_logical(sdp, blk_rq_pos(rq));
@@ -1066,7 +1067,7 @@ static void sd_config_write_same(struct scsi_disk *sdkp)
  **/
 static blk_status_t sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)
 {
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	struct scsi_device *sdp = cmd->device;
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
 	struct bio *bio = rq->bio;
@@ -1115,7 +1116,7 @@ static blk_status_t sd_setup_write_same_cmnd(struct scsi_cmnd *cmd)
 
 static blk_status_t sd_setup_flush_cmnd(struct scsi_cmnd *cmd)
 {
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
 
 	/* flush requests don't perform I/O, zero the S/G table */
@@ -1213,7 +1214,7 @@ static blk_status_t sd_setup_rw6_cmnd(struct scsi_cmnd *cmd, bool write,
 
 static blk_status_t sd_setup_read_write_cmnd(struct scsi_cmnd *cmd)
 {
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	struct scsi_device *sdp = cmd->device;
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
 	sector_t lba = sectors_to_logical(sdp, blk_rq_pos(rq));
@@ -1327,7 +1328,7 @@ static blk_status_t sd_setup_read_write_cmnd(struct scsi_cmnd *cmd)
 
 static blk_status_t sd_init_command(struct scsi_cmnd *cmd)
 {
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 
 	switch (req_op(rq)) {
 	case REQ_OP_DISCARD:
@@ -1373,7 +1374,7 @@ static blk_status_t sd_init_command(struct scsi_cmnd *cmd)
 
 static void sd_uninit_command(struct scsi_cmnd *SCpnt)
 {
-	struct request *rq = SCpnt->request;
+	struct request *rq = scsi_cmd_to_rq(SCpnt);
 	u8 *cmnd;
 
 	if (rq->rq_flags & RQF_SPECIAL_PAYLOAD)
@@ -1906,7 +1907,7 @@ static const struct block_device_operations sd_fops = {
  **/
 static void sd_eh_reset(struct scsi_cmnd *scmd)
 {
-	struct scsi_disk *sdkp = scsi_disk(scmd->request->rq_disk);
+	struct scsi_disk *sdkp = scsi_disk(scsi_cmd_to_rq(scmd)->rq_disk);
 
 	/* New SCSI EH run, reset gate variable */
 	sdkp->ignore_medium_access_errors = false;
@@ -1926,7 +1927,7 @@ static void sd_eh_reset(struct scsi_cmnd *scmd)
  **/
 static int sd_eh_action(struct scsi_cmnd *scmd, int eh_disp)
 {
-	struct scsi_disk *sdkp = scsi_disk(scmd->request->rq_disk);
+	struct scsi_disk *sdkp = scsi_disk(scsi_cmd_to_rq(scmd)->rq_disk);
 	struct scsi_device *sdev = scmd->device;
 
 	if (!scsi_device_online(sdev) ||
@@ -1967,7 +1968,7 @@ static int sd_eh_action(struct scsi_cmnd *scmd, int eh_disp)
 
 static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
 {
-	struct request *req = scmd->request;
+	struct request *req = scsi_cmd_to_rq(scmd);
 	struct scsi_device *sdev = scmd->device;
 	unsigned int transferred, good_bytes;
 	u64 start_lba, end_lba, bad_lba;
@@ -2022,8 +2023,8 @@ static int sd_done(struct scsi_cmnd *SCpnt)
 	unsigned int sector_size = SCpnt->device->sector_size;
 	unsigned int resid;
 	struct scsi_sense_hdr sshdr;
-	struct scsi_disk *sdkp = scsi_disk(SCpnt->request->rq_disk);
-	struct request *req = SCpnt->request;
+	struct request *req = scsi_cmd_to_rq(SCpnt);
+	struct scsi_disk *sdkp = scsi_disk(req->rq_disk);
 	int sense_valid = 0;
 	int sense_deferred = 0;
 
diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c
index e45d8d94574c..d2afaa11e2ee 100644
--- a/drivers/scsi/sd_zbc.c
+++ b/drivers/scsi/sd_zbc.c
@@ -244,7 +244,7 @@ int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
 
 static blk_status_t sd_zbc_cmnd_checks(struct scsi_cmnd *cmd)
 {
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
 	sector_t sector = blk_rq_pos(rq);
 
@@ -322,7 +322,7 @@ static void sd_zbc_update_wp_offset_workfn(struct work_struct *work)
 blk_status_t sd_zbc_prepare_zone_append(struct scsi_cmnd *cmd, sector_t *lba,
 					unsigned int nr_blocks)
 {
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
 	unsigned int wp_offset, zno = blk_rq_zone_no(rq);
 	unsigned long flags;
@@ -387,7 +387,7 @@ blk_status_t sd_zbc_prepare_zone_append(struct scsi_cmnd *cmd, sector_t *lba,
 blk_status_t sd_zbc_setup_zone_mgmt_cmnd(struct scsi_cmnd *cmd,
 					 unsigned char op, bool all)
 {
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	sector_t sector = blk_rq_pos(rq);
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
 	sector_t block = sectors_to_logical(sdkp->device, sector);
@@ -443,7 +443,7 @@ static unsigned int sd_zbc_zone_wp_update(struct scsi_cmnd *cmd,
 					  unsigned int good_bytes)
 {
 	int result = cmd->result;
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
 	unsigned int zno = blk_rq_zone_no(rq);
 	enum req_opf op = req_op(rq);
@@ -517,7 +517,7 @@ unsigned int sd_zbc_complete(struct scsi_cmnd *cmd, unsigned int good_bytes,
 		     struct scsi_sense_hdr *sshdr)
 {
 	int result = cmd->result;
-	struct request *rq = cmd->request;
+	struct request *rq = scsi_cmd_to_rq(cmd);
 
 	if (op_is_zone_mgmt(req_op(rq)) &&
 	    result &&

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 04/50] sr: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (2 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 03/50] sd: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 05/50] scsi_transport_fc: " Bart Van Assche
                   ` (46 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Christoph Hellwig, Hannes Reinecke,
	Ming Lei, Jens Axboe, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/sr.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index e4633b84c556..439e8198a528 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -326,7 +326,8 @@ static int sr_done(struct scsi_cmnd *SCpnt)
 	int good_bytes = (result == 0 ? this_count : 0);
 	int block_sectors = 0;
 	long error_sector;
-	struct scsi_cd *cd = scsi_cd(SCpnt->request->rq_disk);
+	struct request *rq = scsi_cmd_to_rq(SCpnt);
+	struct scsi_cd *cd = scsi_cd(rq->rq_disk);
 
 #ifdef DEBUG
 	scmd_printk(KERN_INFO, SCpnt, "done: %x\n", result);
@@ -348,16 +349,14 @@ static int sr_done(struct scsi_cmnd *SCpnt)
 				break;
 			error_sector =
 				get_unaligned_be32(&SCpnt->sense_buffer[3]);
-			if (SCpnt->request->bio != NULL)
-				block_sectors =
-					bio_sectors(SCpnt->request->bio);
+			if (rq->bio != NULL)
+				block_sectors = bio_sectors(rq->bio);
 			if (block_sectors < 4)
 				block_sectors = 4;
 			if (cd->device->sector_size == 2048)
 				error_sector <<= 2;
 			error_sector &= ~(block_sectors - 1);
-			good_bytes = (error_sector -
-				      blk_rq_pos(SCpnt->request)) << 9;
+			good_bytes = (error_sector - blk_rq_pos(rq)) << 9;
 			if (good_bytes < 0 || good_bytes >= this_count)
 				good_bytes = 0;
 			/*
@@ -389,7 +388,7 @@ static blk_status_t sr_init_command(struct scsi_cmnd *SCpnt)
 {
 	int block = 0, this_count, s_size;
 	struct scsi_cd *cd;
-	struct request *rq = SCpnt->request;
+	struct request *rq = scsi_cmd_to_rq(SCpnt);
 	blk_status_t ret;
 
 	ret = scsi_alloc_sgtables(SCpnt);

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 05/50] scsi_transport_fc: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (3 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 04/50] sr: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 06/50] scsi_transport_spi: " Bart Van Assche
                   ` (45 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Christoph Hellwig, Hannes Reinecke,
	Ming Lei, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/scsi_transport_fc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/scsi_transport_fc.c b/drivers/scsi/scsi_transport_fc.c
index da5b503dc7a1..c21d2e473ab3 100644
--- a/drivers/scsi/scsi_transport_fc.c
+++ b/drivers/scsi/scsi_transport_fc.c
@@ -3804,7 +3804,7 @@ bool fc_eh_should_retry_cmd(struct scsi_cmnd *scmd)
 	struct fc_rport *rport = starget_to_rport(scsi_target(scmd->device));
 
 	if ((rport->port_state != FC_PORTSTATE_ONLINE) &&
-		(scmd->request->cmd_flags & REQ_FAILFAST_TRANSPORT)) {
+		(scsi_cmd_to_rq(scmd)->cmd_flags & REQ_FAILFAST_TRANSPORT)) {
 		set_host_byte(scmd, DID_TRANSPORT_MARGINAL);
 		return false;
 	}

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 06/50] scsi_transport_spi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (4 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 05/50] scsi_transport_fc: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 07/50] ata: " Bart Van Assche
                   ` (44 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Christoph Hellwig, Hannes Reinecke,
	Ming Lei, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/scsi_transport_spi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/scsi_transport_spi.c b/drivers/scsi/scsi_transport_spi.c
index c37dd15d16d2..10f98fc83854 100644
--- a/drivers/scsi/scsi_transport_spi.c
+++ b/drivers/scsi/scsi_transport_spi.c
@@ -1230,7 +1230,7 @@ int spi_populate_tag_msg(unsigned char *msg, struct scsi_cmnd *cmd)
 {
         if (cmd->flags & SCMD_TAGGED) {
 		*msg++ = SIMPLE_QUEUE_TAG;
-        	*msg++ = cmd->request->tag;
+		*msg++ = scsi_cmd_to_rq(cmd)->tag;
         	return 2;
 	}
 

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 07/50] ata: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (5 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 06/50] scsi_transport_spi: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 08/50] RDMA/iser: " Bart Van Assche
                   ` (43 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Jens Axboe, Christoph Hellwig,
	Hannes Reinecke, Ming Lei

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Cc: Jens Axboe <axboe@kernel.dk>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/ata/libata-eh.c   |  5 ++---
 drivers/ata/libata-scsi.c | 10 +++++-----
 drivers/ata/pata_falcon.c |  4 ++--
 3 files changed, 9 insertions(+), 10 deletions(-)

diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index bb3637762985..bf9c4b6c5c3d 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -912,7 +912,7 @@ void ata_qc_schedule_eh(struct ata_queued_cmd *qc)
 	 * Note that ATA_QCFLAG_FAILED is unconditionally set after
 	 * this function completes.
 	 */
-	blk_abort_request(qc->scsicmd->request);
+	blk_abort_request(scsi_cmd_to_rq(qc->scsicmd));
 }
 
 /**
@@ -1893,8 +1893,7 @@ static inline int ata_eh_worth_retry(struct ata_queued_cmd *qc)
  */
 static inline bool ata_eh_quiet(struct ata_queued_cmd *qc)
 {
-	if (qc->scsicmd &&
-	    qc->scsicmd->request->rq_flags & RQF_QUIET)
+	if (qc->scsicmd && scsi_cmd_to_rq(qc->scsicmd)->rq_flags & RQF_QUIET)
 		qc->flags |= ATA_QCFLAG_QUIET;
 	return qc->flags & ATA_QCFLAG_QUIET;
 }
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
index fd8b6febbf70..debc78f653c1 100644
--- a/drivers/ata/libata-scsi.c
+++ b/drivers/ata/libata-scsi.c
@@ -627,7 +627,7 @@ static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
 {
 	struct ata_queued_cmd *qc;
 
-	qc = ata_qc_new_init(dev, cmd->request->tag);
+	qc = ata_qc_new_init(dev, scsi_cmd_to_rq(cmd)->tag);
 	if (qc) {
 		qc->scsicmd = cmd;
 		qc->scsidone = cmd->scsi_done;
@@ -635,7 +635,7 @@ static struct ata_queued_cmd *ata_scsi_qc_new(struct ata_device *dev,
 		qc->sg = scsi_sglist(cmd);
 		qc->n_elem = scsi_sg_count(cmd);
 
-		if (cmd->request->rq_flags & RQF_QUIET)
+		if (scsi_cmd_to_rq(cmd)->rq_flags & RQF_QUIET)
 			qc->flags |= ATA_QCFLAG_QUIET;
 	} else {
 		cmd->result = (DID_OK << 16) | (QUEUE_FULL << 1);
@@ -1497,7 +1497,7 @@ static unsigned int ata_scsi_verify_xlat(struct ata_queued_cmd *qc)
 
 static bool ata_check_nblocks(struct scsi_cmnd *scmd, u32 n_blocks)
 {
-	struct request *rq = scmd->request;
+	struct request *rq = scsi_cmd_to_rq(scmd);
 	u32 req_blocks;
 
 	if (!blk_rq_is_passthrough(rq))
@@ -1532,7 +1532,7 @@ static unsigned int ata_scsi_rw_xlat(struct ata_queued_cmd *qc)
 {
 	struct scsi_cmnd *scmd = qc->scsicmd;
 	const u8 *cdb = scmd->cmnd;
-	struct request *rq = scmd->request;
+	struct request *rq = scsi_cmd_to_rq(scmd);
 	int class = IOPRIO_PRIO_CLASS(req_get_ioprio(rq));
 	unsigned int tf_flags = 0;
 	u64 block;
@@ -3182,7 +3182,7 @@ static unsigned int ata_scsi_write_same_xlat(struct ata_queued_cmd *qc)
 	 * as it modifies the DATA OUT buffer, which would corrupt user
 	 * memory for SG_IO commands.
 	 */
-	if (unlikely(blk_rq_is_passthrough(scmd->request)))
+	if (unlikely(blk_rq_is_passthrough(scsi_cmd_to_rq(scmd))))
 		goto invalid_opcode;
 
 	if (unlikely(scmd->cmd_len < 16)) {
diff --git a/drivers/ata/pata_falcon.c b/drivers/ata/pata_falcon.c
index 27b0952fde6b..154e3577878b 100644
--- a/drivers/ata/pata_falcon.c
+++ b/drivers/ata/pata_falcon.c
@@ -50,8 +50,8 @@ static unsigned int pata_falcon_data_xfer(struct ata_queued_cmd *qc,
 	struct scsi_cmnd *cmd = qc->scsicmd;
 	bool swap = 1;
 
-	if (dev->class == ATA_DEV_ATA && cmd && cmd->request &&
-	    !blk_rq_is_passthrough(cmd->request))
+	if (dev->class == ATA_DEV_ATA && cmd &&
+	    !blk_rq_is_passthrough(scsi_cmd_to_rq(cmd)))
 		swap = 0;
 
 	/* Transfer multiple of 2 bytes */

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 08/50] RDMA/iser: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (6 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 07/50] ata: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:58   ` Sagi Grimberg
  2021-05-18 17:44 ` [PATCH v2 09/50] RDMA/srp: " Bart Van Assche
                   ` (42 subsequent siblings)
  50 siblings, 1 reply; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Sagi Grimberg, Max Gurtovoy,
	Doug Ledford, Jason Gunthorpe

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/infiniband/ulp/iser/iser_memory.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/infiniband/ulp/iser/iser_memory.c b/drivers/infiniband/ulp/iser/iser_memory.c
index afec40da9b58..9776b755d848 100644
--- a/drivers/infiniband/ulp/iser/iser_memory.c
+++ b/drivers/infiniband/ulp/iser/iser_memory.c
@@ -159,7 +159,7 @@ iser_set_dif_domain(struct scsi_cmnd *sc, struct ib_sig_domain *domain)
 {
 	domain->sig_type = IB_SIG_TYPE_T10_DIF;
 	domain->sig.dif.pi_interval = scsi_prot_interval(sc);
-	domain->sig.dif.ref_tag = t10_pi_ref_tag(sc->request);
+	domain->sig.dif.ref_tag = t10_pi_ref_tag(scsi_cmd_to_rq(sc));
 	/*
 	 * At the moment we hard code those, but in the future
 	 * we will take them from sc.

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 09/50] RDMA/srp: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (7 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 08/50] RDMA/iser: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 10/50] zfcp: " Bart Van Assche
                   ` (41 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Doug Ledford, Jason Gunthorpe

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/infiniband/ulp/srp/ib_srp.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 31f8aa2c40ed..e3a7ee8d451d 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -2182,8 +2182,8 @@ static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
 	if (unlikely(scmnd->result))
 		goto err;
 
-	WARN_ON_ONCE(scmnd->request->tag < 0);
-	tag = blk_mq_unique_tag(scmnd->request);
+	WARN_ON_ONCE(scsi_cmd_to_rq(scmnd)->tag < 0);
+	tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmnd));
 	ch = &target->ch[blk_mq_unique_tag_to_hwq(tag)];
 	idx = blk_mq_unique_tag_to_tag(tag);
 	WARN_ONCE(idx >= target->req_ring_size, "%s: tag %#x: idx %d >= %d\n",
@@ -2814,7 +2814,7 @@ static int srp_abort(struct scsi_cmnd *scmnd)
 
 	if (!req)
 		return SUCCESS;
-	tag = blk_mq_unique_tag(scmnd->request);
+	tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmnd));
 	ch_idx = blk_mq_unique_tag_to_hwq(tag);
 	if (WARN_ON_ONCE(ch_idx >= target->ch_count))
 		return SUCCESS;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 10/50] zfcp: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (8 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 09/50] RDMA/srp: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 11/50] 53c700: " Bart Van Assche
                   ` (40 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Benjamin Block, Steffen Maier,
	Heiko Carstens, Vasily Gorbik, Christian Borntraeger

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Acked-by: Benjamin Block <bblock@linux.ibm.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/s390/scsi/zfcp_fsf.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
index 2e4804ef2fb9..9e3f37b4423d 100644
--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -2377,7 +2377,7 @@ static void zfcp_fsf_req_trace(struct zfcp_fsf_req *req, struct scsi_cmnd *scsi)
 		}
 	}
 
-	blk_add_driver_data(scsi->request, &blktrc, sizeof(blktrc));
+	blk_add_driver_data(scsi_cmd_to_rq(scsi), &blktrc, sizeof(blktrc));
 }
 
 /**

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 11/50] 53c700: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (9 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 10/50] zfcp: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 12/50] NCR5380: " Bart Van Assche
                   ` (39 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen; +Cc: linux-scsi, Bart Van Assche, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/53c700.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c
index 77ccb96e5ed4..4bff29169f19 100644
--- a/drivers/scsi/53c700.c
+++ b/drivers/scsi/53c700.c
@@ -1823,7 +1823,7 @@ NCR_700_queuecommand_lck(struct scsi_cmnd *SCp, void (*done)(struct scsi_cmnd *)
 
 	if ((hostdata->tag_negotiated & (1<<scmd_id(SCp))) &&
 	    SCp->device->simple_tags) {
-		slot->tag = SCp->request->tag;
+		slot->tag = scsi_cmd_to_rq(SCp)->tag;
 		CDEBUG(KERN_DEBUG, SCp, "sending out tag %d, slot %p\n",
 		       slot->tag, slot);
 	} else {

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 12/50] NCR5380: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (10 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 11/50] 53c700: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 13/50] aacraid: " Bart Van Assche
                   ` (38 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Finn Thain, Michael Schmitz,
	James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/NCR5380.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c
index 2ddbcaa667d1..47502f63a167 100644
--- a/drivers/scsi/NCR5380.c
+++ b/drivers/scsi/NCR5380.c
@@ -778,7 +778,7 @@ static void NCR5380_dma_complete(struct Scsi_Host *instance)
 	}
 
 #ifdef CONFIG_SUN3
-	if ((sun3scsi_dma_finish(rq_data_dir(hostdata->connected->request)))) {
+	if ((sun3scsi_dma_finish(rq_data_dir(scsi_cmd_to_rq(hostdata->connected))))) {
 		pr_err("scsi%d: overrun in UDC counter -- not prepared to deal with this!\n",
 		       instance->host_no);
 		BUG();
@@ -1710,7 +1710,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance)
 				count = sun3scsi_dma_xfer_len(hostdata, cmd);
 
 				if (count > 0) {
-					if (rq_data_dir(cmd->request))
+					if (rq_data_dir(scsi_cmd_to_rq(cmd)))
 						sun3scsi_dma_send_setup(hostdata,
 						                        cmd->SCp.ptr, count);
 					else
@@ -2158,7 +2158,7 @@ static void NCR5380_reselect(struct Scsi_Host *instance)
 		count = sun3scsi_dma_xfer_len(hostdata, tmp);
 
 		if (count > 0) {
-			if (rq_data_dir(tmp->request))
+			if (rq_data_dir(scsi_cmd_to_rq(tmp)))
 				sun3scsi_dma_send_setup(hostdata,
 				                        tmp->SCp.ptr, count);
 			else

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 13/50] aacraid: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (11 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 12/50] NCR5380: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 14/50] advansys: " Bart Van Assche
                   ` (37 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Adaptec OEM Raid Solutions,
	James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/aacraid/aachba.c  | 2 +-
 drivers/scsi/aacraid/commsup.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
index 46b8dffce2dd..567d305d3ab4 100644
--- a/drivers/scsi/aacraid/aachba.c
+++ b/drivers/scsi/aacraid/aachba.c
@@ -1505,7 +1505,7 @@ static struct aac_srb * aac_scsi_common(struct fib * fib, struct scsi_cmnd * cmd
 	srbcmd->id       = cpu_to_le32(scmd_id(cmd));
 	srbcmd->lun      = cpu_to_le32(cmd->device->lun);
 	srbcmd->flags    = cpu_to_le32(flag);
-	timeout = cmd->request->timeout/HZ;
+	timeout = scsi_cmd_to_rq(cmd)->timeout / HZ;
 	if (timeout == 0)
 		timeout = (dev->sa_firmware ? AAC_SA_TIMEOUT : AAC_ARC_TIMEOUT);
 	srbcmd->timeout  = cpu_to_le32(timeout);  // timeout in seconds
diff --git a/drivers/scsi/aacraid/commsup.c b/drivers/scsi/aacraid/commsup.c
index 54eb4d41bc2c..deb32c9f4b3e 100644
--- a/drivers/scsi/aacraid/commsup.c
+++ b/drivers/scsi/aacraid/commsup.c
@@ -224,7 +224,7 @@ struct fib *aac_fib_alloc_tag(struct aac_dev *dev, struct scsi_cmnd *scmd)
 {
 	struct fib *fibptr;
 
-	fibptr = &dev->fibs[scmd->request->tag];
+	fibptr = &dev->fibs[scsi_cmd_to_rq(scmd)->tag];
 	/*
 	 *	Null out fields that depend on being zero at the start of
 	 *	each I/O

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 14/50] advansys: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (12 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 13/50] aacraid: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 15/50] bnx2i: " Bart Van Assche
                   ` (36 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Matthew Wilcox, Hannes Reinecke,
	James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/advansys.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c
index 800052f10699..dd6355382c62 100644
--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -7427,7 +7427,7 @@ static int asc_build_req(struct asc_board *boardp, struct scsi_cmnd *scp,
 	 * Set the srb_tag to the command tag + 1, as
 	 * srb_tag '0' is used internally by the chip.
 	 */
-	srb_tag = scp->request->tag + 1;
+	srb_tag = scsi_cmd_to_rq(scp)->tag + 1;
 	asc_scsi_q->q2.srb_tag = srb_tag;
 
 	/*
@@ -7641,7 +7641,7 @@ static int
 adv_build_req(struct asc_board *boardp, struct scsi_cmnd *scp,
 	      adv_req_t **adv_reqpp)
 {
-	u32 srb_tag = scp->request->tag;
+	u32 srb_tag = scsi_cmd_to_rq(scp)->tag;
 	adv_req_t *reqp;
 	ADV_SCSI_REQ_Q *scsiqp;
 	int ret;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 15/50] bnx2i: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (13 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 14/50] advansys: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 16/50] csiostor: " Bart Van Assche
                   ` (35 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Nilesh Javali, Manish Rangankar,
	GR-QLogic-Storage-Upstream, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/bnx2i/bnx2i_hwi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/bnx2i/bnx2i_hwi.c b/drivers/scsi/bnx2i/bnx2i_hwi.c
index 43e8a1dafec0..5521469ce678 100644
--- a/drivers/scsi/bnx2i/bnx2i_hwi.c
+++ b/drivers/scsi/bnx2i/bnx2i_hwi.c
@@ -1918,7 +1918,7 @@ static int bnx2i_queue_scsi_cmd_resp(struct iscsi_session *session,
 
 	spin_unlock(&session->back_lock);
 
-	p = &per_cpu(bnx2i_percpu, blk_mq_rq_cpu(sc->request));
+	p = &per_cpu(bnx2i_percpu, blk_mq_rq_cpu(scsi_cmd_to_rq(sc)));
 	spin_lock(&p->p_work_lock);
 	if (unlikely(!p->iothread)) {
 		rc = -EINVAL;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 16/50] csiostor: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (14 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 15/50] bnx2i: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 17/50] cxlflash: " Bart Van Assche
                   ` (34 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, James E.J. Bottomley, Jiapeng Chong,
	Colin Ian King

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/csiostor/csio_scsi.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c
index 56b9ad0a1ca0..3b2eb6ce1fcf 100644
--- a/drivers/scsi/csiostor/csio_scsi.c
+++ b/drivers/scsi/csiostor/csio_scsi.c
@@ -1786,7 +1786,7 @@ csio_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmnd)
 	struct csio_scsi_qset *sqset;
 	struct fc_rport *rport = starget_to_rport(scsi_target(cmnd->device));
 
-	sqset = &hw->sqset[ln->portid][blk_mq_rq_cpu(cmnd->request)];
+	sqset = &hw->sqset[ln->portid][blk_mq_rq_cpu(scsi_cmd_to_rq(cmnd))];
 
 	nr = fc_remote_port_chkready(rport);
 	if (nr) {
@@ -1989,13 +1989,13 @@ csio_eh_abort_handler(struct scsi_cmnd *cmnd)
 		csio_info(hw,
 			"Aborted SCSI command to (%d:%llu) tag %u\n",
 			cmnd->device->id, cmnd->device->lun,
-			cmnd->request->tag);
+			scsi_cmd_to_rq(cmnd)->tag);
 		return SUCCESS;
 	} else {
 		csio_info(hw,
 			"Failed to abort SCSI command, (%d:%llu) tag %u\n",
 			cmnd->device->id, cmnd->device->lun,
-			cmnd->request->tag);
+			scsi_cmd_to_rq(cmnd)->tag);
 		return FAILED;
 	}
 }

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 17/50] cxlflash: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (15 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 16/50] csiostor: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 18/50] dpt_i2o: " Bart Van Assche
                   ` (33 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Manoj N. Kumar, Matthew R. Ochs,
	Uma Krishnan, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/cxlflash/main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/cxlflash/main.c b/drivers/scsi/cxlflash/main.c
index 222593bc2afe..2f1894588e0b 100644
--- a/drivers/scsi/cxlflash/main.c
+++ b/drivers/scsi/cxlflash/main.c
@@ -433,7 +433,7 @@ static u32 cmd_to_target_hwq(struct Scsi_Host *host, struct scsi_cmnd *scp,
 		hwq = afu->hwq_rr_count++ % afu->num_hwqs;
 		break;
 	case HWQ_MODE_TAG:
-		tag = blk_mq_unique_tag(scp->request);
+		tag = blk_mq_unique_tag(scsi_cmd_to_rq(scp));
 		hwq = blk_mq_unique_tag_to_hwq(tag);
 		break;
 	case HWQ_MODE_CPU:

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 18/50] dpt_i2o: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (16 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 17/50] cxlflash: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 19/50] fnic: " Bart Van Assche
                   ` (32 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Adaptec OEM Raid Solutions,
	James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/dpt_i2o.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c
index a18a4a08f049..7af96d14c9bc 100644
--- a/drivers/scsi/dpt_i2o.c
+++ b/drivers/scsi/dpt_i2o.c
@@ -652,7 +652,7 @@ static int adpt_abort(struct scsi_cmnd * cmd)
 	msg[2] = 0;
 	msg[3]= 0;
 	/* Add 1 to avoid firmware treating it as invalid command */
-	msg[4] = cmd->request->tag + 1;
+	msg[4] = scsi_cmd_to_rq(cmd)->tag + 1;
 	if (pHba->host)
 		spin_lock_irq(pHba->host->host_lock);
 	rcode = adpt_i2o_post_wait(pHba, msg, sizeof(msg), FOREVER);
@@ -2236,7 +2236,7 @@ static s32 adpt_scsi_to_i2o(adpt_hba* pHba, struct scsi_cmnd* cmd, struct adpt_d
 	msg[1] = ((0xff<<24)|(HOST_TID<<12)|d->tid);
 	msg[2] = 0;
 	/* Add 1 to avoid firmware treating it as invalid command */
-	msg[3] = cmd->request->tag + 1;
+	msg[3] = scsi_cmd_to_rq(cmd)->tag + 1;
 	// Our cards use the transaction context as the tag for queueing
 	// Adaptec/DPT Private stuff 
 	msg[4] = I2O_CMD_SCSI_EXEC|(DPT_ORGANIZATION_ID<<16);

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 19/50] fnic: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (17 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 18/50] dpt_i2o: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 20/50] hisi_sas: " Bart Van Assche
                   ` (31 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Satish Kharat, Sesidhar Baddela,
	Karan Tilak Kumar, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/fnic/fnic_scsi.c | 49 +++++++++++++++++------------------
 1 file changed, 24 insertions(+), 25 deletions(-)

diff --git a/drivers/scsi/fnic/fnic_scsi.c b/drivers/scsi/fnic/fnic_scsi.c
index 762cc8bd2653..ee02f5ed90ee 100644
--- a/drivers/scsi/fnic/fnic_scsi.c
+++ b/drivers/scsi/fnic/fnic_scsi.c
@@ -107,7 +107,7 @@ static void fnic_cleanup_io(struct fnic *fnic);
 static inline spinlock_t *fnic_io_lock_hash(struct fnic *fnic,
 					    struct scsi_cmnd *sc)
 {
-	u32 hash = sc->request->tag & (FNIC_IO_LOCKS - 1);
+	u32 hash = scsi_cmd_to_rq(sc)->tag & (FNIC_IO_LOCKS - 1);
 
 	return &fnic->io_req_lock[hash];
 }
@@ -390,7 +390,7 @@ static inline int fnic_queue_wq_copy_desc(struct fnic *fnic,
 	    (rp->flags & FC_RP_FLAGS_RETRY))
 		exch_flags |= FCPIO_ICMND_SRFLAG_RETRY;
 
-	fnic_queue_wq_copy_desc_icmnd_16(wq, sc->request->tag,
+	fnic_queue_wq_copy_desc_icmnd_16(wq, scsi_cmd_to_rq(sc)->tag,
 					 0, exch_flags, io_req->sgl_cnt,
 					 SCSI_SENSE_BUFFERSIZE,
 					 io_req->sgl_list_pa,
@@ -422,6 +422,7 @@ static inline int fnic_queue_wq_copy_desc(struct fnic *fnic,
  */
 static int fnic_queuecommand_lck(struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *))
 {
+	struct request *rq = scsi_cmd_to_rq(sc);
 	struct fc_lport *lp = shost_priv(sc->device->host);
 	struct fc_rport *rport;
 	struct fnic_io_req *io_req = NULL;
@@ -511,8 +512,7 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc, void (*done)(struct scsi_
 	sg_count = scsi_dma_map(sc);
 	if (sg_count < 0) {
 		FNIC_TRACE(fnic_queuecommand, sc->device->host->host_no,
-			  sc->request->tag, sc, 0, sc->cmnd[0],
-			  sg_count, CMD_STATE(sc));
+			  rq->tag, sc, 0, sc->cmnd[0], sg_count, CMD_STATE(sc));
 		mempool_free(io_req, fnic->io_req_pool);
 		goto out;
 	}
@@ -571,7 +571,7 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc, void (*done)(struct scsi_
 		 * refetch the pointer under the lock.
 		 */
 		FNIC_TRACE(fnic_queuecommand, sc->device->host->host_no,
-			  sc->request->tag, sc, 0, 0, 0,
+			  rq->tag, sc, 0, 0, 0,
 			  (((u64)CMD_FLAGS(sc) << 32) | CMD_STATE(sc)));
 		io_req = (struct fnic_io_req *)CMD_SP(sc);
 		CMD_SP(sc) = NULL;
@@ -603,8 +603,7 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc, void (*done)(struct scsi_
 			sc->cmnd[5]);
 
 	FNIC_TRACE(fnic_queuecommand, sc->device->host->host_no,
-		  sc->request->tag, sc, io_req,
-		  sg_count, cmd_trace,
+		  rq->tag, sc, io_req, sg_count, cmd_trace,
 		  (((u64)CMD_FLAGS(sc) >> 32) | CMD_STATE(sc)));
 
 	/* if only we issued IO, will we have the io lock */
@@ -1364,6 +1363,7 @@ int fnic_wq_copy_cmpl_handler(struct fnic *fnic, int copy_work_to_do)
 static bool fnic_cleanup_io_iter(struct scsi_cmnd *sc, void *data,
 				 bool reserved)
 {
+	struct request *rq = scsi_cmd_to_rq(sc);
 	struct fnic *fnic = data;
 	struct fnic_io_req *io_req;
 	unsigned long flags = 0;
@@ -1371,7 +1371,7 @@ static bool fnic_cleanup_io_iter(struct scsi_cmnd *sc, void *data,
 	unsigned long start_time = 0;
 	struct fnic_stats *fnic_stats = &fnic->fnic_stats;
 
-	io_lock = fnic_io_lock_tag(fnic, sc->request->tag);
+	io_lock = fnic_io_lock_tag(fnic, rq->tag);
 	spin_lock_irqsave(io_lock, flags);
 
 	io_req = (struct fnic_io_req *)CMD_SP(sc);
@@ -1413,7 +1413,7 @@ static bool fnic_cleanup_io_iter(struct scsi_cmnd *sc, void *data,
 	sc->result = DID_TRANSPORT_DISRUPTED << 16;
 	FNIC_SCSI_DBG(KERN_DEBUG, fnic->lport->host,
 		      "fnic_cleanup_io: tag:0x%x : sc:0x%p duration = %lu DID_TRANSPORT_DISRUPTED\n",
-		      sc->request->tag, sc, (jiffies - start_time));
+		      rq->tag, sc, jiffies - start_time);
 
 	if (atomic64_read(&fnic->io_cmpl_skip))
 		atomic64_dec(&fnic->io_cmpl_skip);
@@ -1425,10 +1425,10 @@ static bool fnic_cleanup_io_iter(struct scsi_cmnd *sc, void *data,
 		if (!(CMD_FLAGS(sc) & FNIC_IO_ISSUED))
 			shost_printk(KERN_ERR, fnic->lport->host,
 				     "Calling done for IO not issued to fw: tag:0x%x sc:0x%p\n",
-				     sc->request->tag, sc);
+				     rq->tag, sc);
 
 		FNIC_TRACE(fnic_cleanup_io,
-			   sc->device->host->host_no, sc->request->tag, sc,
+			   sc->device->host->host_no, rq->tag, sc,
 			   jiffies_to_msecs(jiffies - start_time),
 			   0, ((u64)sc->cmnd[0] << 32 |
 			       (u64)sc->cmnd[2] << 24 |
@@ -1566,7 +1566,7 @@ static bool fnic_rport_abort_io_iter(struct scsi_cmnd *sc, void *data,
 {
 	struct fnic_rport_abort_io_iter_data *iter_data = data;
 	struct fnic *fnic = iter_data->fnic;
-	int abt_tag = sc->request->tag;
+	int abt_tag = scsi_cmd_to_rq(sc)->tag;
 	struct fnic_io_req *io_req;
 	spinlock_t *io_lock;
 	unsigned long flags;
@@ -1727,6 +1727,7 @@ void fnic_terminate_rport_io(struct fc_rport *rport)
  */
 int fnic_abort_cmd(struct scsi_cmnd *sc)
 {
+	struct request *rq = scsi_cmd_to_rq(sc);
 	struct fc_lport *lp;
 	struct fnic *fnic;
 	struct fnic_io_req *io_req = NULL;
@@ -1741,7 +1742,7 @@ int fnic_abort_cmd(struct scsi_cmnd *sc)
 	struct abort_stats *abts_stats;
 	struct terminate_stats *term_stats;
 	enum fnic_ioreq_state old_ioreq_state;
-	int tag;
+	int tag = rq->tag;
 	unsigned long abt_issued_time;
 	DECLARE_COMPLETION_ONSTACK(tm_done);
 
@@ -1757,7 +1758,6 @@ int fnic_abort_cmd(struct scsi_cmnd *sc)
 	term_stats = &fnic->fnic_stats.term_stats;
 
 	rport = starget_to_rport(scsi_target(sc->device));
-	tag = sc->request->tag;
 	FNIC_SCSI_DBG(KERN_DEBUG,
 		fnic->lport->host,
 		"Abort Cmd called FCID 0x%x, LUN 0x%llx TAG %x flags %x\n",
@@ -1842,7 +1842,7 @@ int fnic_abort_cmd(struct scsi_cmnd *sc)
 	/* Now queue the abort command to firmware */
 	int_to_scsilun(sc->device->lun, &fc_lun);
 
-	if (fnic_queue_abort_io_req(fnic, sc->request->tag, task_req,
+	if (fnic_queue_abort_io_req(fnic, rq->tag, task_req,
 				    fc_lun.scsi_lun, io_req)) {
 		spin_lock_irqsave(io_lock, flags);
 		if (CMD_STATE(sc) == FNIC_IOREQ_ABTS_PENDING)
@@ -1943,8 +1943,7 @@ int fnic_abort_cmd(struct scsi_cmnd *sc)
 	}
 
 fnic_abort_cmd_end:
-	FNIC_TRACE(fnic_abort_cmd, sc->device->host->host_no,
-		  sc->request->tag, sc,
+	FNIC_TRACE(fnic_abort_cmd, sc->device->host->host_no, rq->tag, sc,
 		  jiffies_to_msecs(jiffies - start_time),
 		  0, ((u64)sc->cmnd[0] << 32 |
 		  (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 |
@@ -1994,7 +1993,7 @@ static inline int fnic_queue_dr_io_req(struct fnic *fnic,
 	/* fill in the lun info */
 	int_to_scsilun(sc->device->lun, &fc_lun);
 
-	fnic_queue_wq_copy_desc_itmf(wq, sc->request->tag | FNIC_TAG_DEV_RST,
+	fnic_queue_wq_copy_desc_itmf(wq, scsi_cmd_to_rq(sc)->tag | FNIC_TAG_DEV_RST,
 				     0, FCPIO_ITMF_LUN_RESET, SCSI_NO_TAG,
 				     fc_lun.scsi_lun, io_req->port_id,
 				     fnic->config.ra_tov, fnic->config.ed_tov);
@@ -2025,7 +2024,7 @@ static bool fnic_pending_aborts_iter(struct scsi_cmnd *sc,
 	struct fnic_pending_aborts_iter_data *iter_data = data;
 	struct fnic *fnic = iter_data->fnic;
 	struct scsi_device *lun_dev = iter_data->lun_dev;
-	int abt_tag = sc->request->tag;
+	int abt_tag = scsi_cmd_to_rq(sc)->tag;
 	struct fnic_io_req *io_req;
 	spinlock_t *io_lock;
 	unsigned long flags;
@@ -2206,14 +2205,15 @@ static int fnic_clean_pending_aborts(struct fnic *fnic,
 static inline int
 fnic_scsi_host_start_tag(struct fnic *fnic, struct scsi_cmnd *sc)
 {
-	struct request_queue *q = sc->request->q;
+	struct request *rq = scsi_cmd_to_rq(sc);
+	struct request_queue *q = rq->q;
 	struct request *dummy;
 
 	dummy = blk_mq_alloc_request(q, REQ_OP_WRITE, BLK_MQ_REQ_NOWAIT);
 	if (IS_ERR(dummy))
 		return SCSI_NO_TAG;
 
-	sc->tag = sc->request->tag = dummy->tag;
+	sc->tag = rq->tag = dummy->tag;
 	sc->host_scribble = (unsigned char *)dummy;
 
 	return dummy->tag;
@@ -2238,6 +2238,7 @@ fnic_scsi_host_end_tag(struct fnic *fnic, struct scsi_cmnd *sc)
  */
 int fnic_device_reset(struct scsi_cmnd *sc)
 {
+	struct request *rq = scsi_cmd_to_rq(sc);
 	struct fc_lport *lp;
 	struct fnic *fnic;
 	struct fnic_io_req *io_req = NULL;
@@ -2250,7 +2251,7 @@ int fnic_device_reset(struct scsi_cmnd *sc)
 	struct scsi_lun fc_lun;
 	struct fnic_stats *fnic_stats;
 	struct reset_stats *reset_stats;
-	int tag = 0;
+	int tag = rq->tag;
 	DECLARE_COMPLETION_ONSTACK(tm_done);
 	int tag_gen_flag = 0;   /*to track tags allocated by fnic driver*/
 	bool new_sc = 0;
@@ -2284,7 +2285,6 @@ int fnic_device_reset(struct scsi_cmnd *sc)
 	CMD_FLAGS(sc) = FNIC_DEVICE_RESET;
 	/* Allocate tag if not present */
 
-	tag = sc->request->tag;
 	if (unlikely(tag < 0)) {
 		/*
 		 * Really should fix the midlayer to pass in a proper
@@ -2458,8 +2458,7 @@ int fnic_device_reset(struct scsi_cmnd *sc)
 	}
 
 fnic_device_reset_end:
-	FNIC_TRACE(fnic_device_reset, sc->device->host->host_no,
-		  sc->request->tag, sc,
+	FNIC_TRACE(fnic_device_reset, sc->device->host->host_no, rq->tag, sc,
 		  jiffies_to_msecs(jiffies - start_time),
 		  0, ((u64)sc->cmnd[0] << 32 |
 		  (u64)sc->cmnd[2] << 24 | (u64)sc->cmnd[3] << 16 |

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 20/50] hisi_sas: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (18 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 19/50] fnic: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 21/50] hpsa: " Bart Van Assche
                   ` (30 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, John Garry, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Acked-by: John Garry <john.garry@huawei.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/hisi_sas/hisi_sas_main.c  | 4 ++--
 drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c
index 5a204074099c..b9337aa6cf8b 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_main.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_main.c
@@ -185,7 +185,7 @@ static int hisi_sas_slot_index_alloc(struct hisi_hba *hisi_hba,
 	void *bitmap = hisi_hba->slot_index_tags;
 
 	if (scsi_cmnd)
-		return scsi_cmnd->request->tag;
+		return scsi_cmd_to_rq(scsi_cmnd)->tag;
 
 	spin_lock(&hisi_hba->lock);
 	index = find_next_zero_bit(bitmap, hisi_hba->slot_index_count,
@@ -449,7 +449,7 @@ static int hisi_sas_task_prep(struct sas_task *task,
 		unsigned int dq_index;
 		u32 blk_tag;
 
-		blk_tag = blk_mq_unique_tag(scmd->request);
+		blk_tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd));
 		dq_index = blk_mq_unique_tag_to_hwq(blk_tag);
 		*dq_pointer = dq = &hisi_hba->dq[dq_index];
 	} else {
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
index 499c770d405c..6ef7e950226c 100644
--- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
+++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c
@@ -1153,7 +1153,7 @@ static void fill_prot_v3_hw(struct scsi_cmnd *scsi_cmnd,
 {
 	unsigned char prot_op = scsi_get_prot_op(scsi_cmnd);
 	unsigned int interval = scsi_prot_interval(scsi_cmnd);
-	u32 lbrt_chk_val = t10_pi_ref_tag(scsi_cmnd->request);
+	u32 lbrt_chk_val = t10_pi_ref_tag(scsi_cmd_to_rq(scsi_cmnd));
 
 	switch (prot_op) {
 	case SCSI_PROT_READ_INSERT:

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 21/50] hpsa: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (19 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 20/50] hisi_sas: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 22/50] ibmvfc: " Bart Van Assche
                   ` (29 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Don Brace, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/hpsa.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
index f135a10f582b..3faa87fa296a 100644
--- a/drivers/scsi/hpsa.c
+++ b/drivers/scsi/hpsa.c
@@ -5686,7 +5686,7 @@ static int hpsa_scsi_queue_command(struct Scsi_Host *sh, struct scsi_cmnd *cmd)
 	/* Get the ptr to our adapter structure out of cmd->host. */
 	h = sdev_to_hba(cmd->device);
 
-	BUG_ON(cmd->request->tag < 0);
+	BUG_ON(scsi_cmd_to_rq(cmd)->tag < 0);
 
 	dev = cmd->device->hostdata;
 	if (!dev) {
@@ -5729,7 +5729,7 @@ static int hpsa_scsi_queue_command(struct Scsi_Host *sh, struct scsi_cmnd *cmd)
 	 *       and is therefore a brand-new command.
 	 */
 	if (likely(cmd->retries == 0 &&
-			!blk_rq_is_passthrough(cmd->request) &&
+			!blk_rq_is_passthrough(scsi_cmd_to_rq(cmd)) &&
 			h->acciopath_status)) {
 		/* Submit with the retry_pending flag unset. */
 		rc = hpsa_ioaccel_submit(h, c, cmd, false);
@@ -5894,7 +5894,7 @@ static int hpsa_scsi_add_host(struct ctlr_info *h)
  */
 static int hpsa_get_cmd_index(struct scsi_cmnd *scmd)
 {
-	int idx = scmd->request->tag;
+	int idx = scsi_cmd_to_rq(scmd)->tag;
 
 	if (idx < 0)
 		return idx;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 22/50] ibmvfc: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (20 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 21/50] hpsa: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 23/50] ibmvscsi: " Bart Van Assche
                   ` (28 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Tyrel Datwyler, Michael Ellerman,
	James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/ibmvscsi/ibmvfc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
index a251dbf630cc..9067ce1611d3 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -1910,7 +1910,7 @@ static int ibmvfc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *cmnd)
 	struct ibmvfc_cmd *vfc_cmd;
 	struct ibmvfc_fcp_cmd_iu *iu;
 	struct ibmvfc_event *evt;
-	u32 tag_and_hwq = blk_mq_unique_tag(cmnd->request);
+	u32 tag_and_hwq = blk_mq_unique_tag(scsi_cmd_to_rq(cmnd));
 	u16 hwq = blk_mq_unique_tag_to_hwq(tag_and_hwq);
 	u16 scsi_channel;
 	int rc;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 23/50] ibmvscsi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (21 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 22/50] ibmvfc: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 24/50] ips: " Bart Van Assche
                   ` (27 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Tyrel Datwyler, Michael Ellerman,
	James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/ibmvscsi/ibmvscsi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
index e75b0068ad84..d8ed85624bf9 100644
--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
+++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
@@ -1072,7 +1072,7 @@ static int ibmvscsi_queuecommand_lck(struct scsi_cmnd *cmnd,
 	init_event_struct(evt_struct,
 			  handle_cmd_rsp,
 			  VIOSRP_SRP_FORMAT,
-			  cmnd->request->timeout/HZ);
+			  scsi_cmd_to_rq(cmnd)->timeout / HZ);
 
 	evt_struct->cmnd = cmnd;
 	evt_struct->cmnd_done = done;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 24/50] ips: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (22 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 23/50] ibmvscsi: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 25/50] libsas: " Bart Van Assche
                   ` (26 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Adaptec OEM Raid Solutions,
	James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/ips.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
index bc33d54a4011..66152888ad8c 100644
--- a/drivers/scsi/ips.c
+++ b/drivers/scsi/ips.c
@@ -3733,7 +3733,7 @@ ips_send_cmd(ips_ha_t * ha, ips_scb_t * scb)
 		scb->cmd.dcdb.segment_4G = 0;
 		scb->cmd.dcdb.enhanced_sg = 0;
 
-		TimeOut = scb->scsi_cmd->request->timeout;
+		TimeOut = scsi_cmd_to_rq(scb->scsi_cmd)->timeout;
 
 		if (ha->subsys->param[4] & 0x00100000) {	/* If NEW Tape DCDB is Supported */
 			if (!scb->sg_len) {

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 25/50] libsas: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (23 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 24/50] ips: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-19 10:12   ` John Garry
  2021-05-18 17:44 ` [PATCH v2 26/50] lpfc: " Bart Van Assche
                   ` (25 subsequent siblings)
  50 siblings, 1 reply; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, James E.J. Bottomley, John Garry,
	Jason Yan, Luo Jiaxing, Gustavo A. R. Silva, Jolly Shah,
	Liu Shixin

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/libsas/sas_ata.c       | 2 +-
 drivers/scsi/libsas/sas_scsi_host.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index e9a86128f1f1..d007a5714923 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -595,7 +595,7 @@ void sas_ata_task_abort(struct sas_task *task)
 
 	/* Bounce SCSI-initiated commands to the SCSI EH */
 	if (qc->scsicmd) {
-		blk_abort_request(qc->scsicmd->request);
+		blk_abort_request(scsi_cmd_to_rq(qc->scsicmd));
 		return;
 	}
 
diff --git a/drivers/scsi/libsas/sas_scsi_host.c b/drivers/scsi/libsas/sas_scsi_host.c
index 1bf939818c98..b6cd9d87fbd0 100644
--- a/drivers/scsi/libsas/sas_scsi_host.c
+++ b/drivers/scsi/libsas/sas_scsi_host.c
@@ -908,7 +908,7 @@ void sas_task_abort(struct sas_task *task)
 	if (dev_is_sata(task->dev))
 		sas_ata_task_abort(task);
 	else
-		blk_abort_request(sc->request);
+		blk_abort_request(scsi_cmd_to_rq(sc));
 }
 
 void sas_target_destroy(struct scsi_target *starget)

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 26/50] lpfc: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (24 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 25/50] libsas: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 27/50] megaraid: " Bart Van Assche
                   ` (24 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, James Smart, Dick Kennedy,
	James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/lpfc/lpfc_scsi.c | 63 +++++++++++++++++------------------
 1 file changed, 31 insertions(+), 32 deletions(-)

diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
index eefbb9b22798..fd4e77fe25f1 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -648,7 +648,7 @@ lpfc_get_scsi_buf_s4(struct lpfc_hba *phba, struct lpfc_nodelist *ndlp,
 
 	cpu = raw_smp_processor_id();
 	if (cmnd && phba->cfg_fcp_io_sched == LPFC_FCP_SCHED_BY_HDWQ) {
-		tag = blk_mq_unique_tag(cmnd->request);
+		tag = blk_mq_unique_tag(scsi_cmd_to_rq(cmnd));
 		idx = blk_mq_unique_tag_to_hwq(tag);
 	} else {
 		idx = phba->sli4_hba.cpu_map[cpu].hdwq;
@@ -1010,7 +1010,7 @@ lpfc_bg_err_inject(struct lpfc_hba *phba, struct scsi_cmnd *sc,
 		return 0;
 
 	sgpe = scsi_prot_sglist(sc);
-	lba = t10_pi_ref_tag(sc->request);
+	lba = t10_pi_ref_tag(scsi_cmd_to_rq(sc));
 	if (lba == LPFC_INVALID_REFTAG)
 		return 0;
 
@@ -1593,7 +1593,7 @@ lpfc_bg_setup_bpl(struct lpfc_hba *phba, struct scsi_cmnd *sc,
 		goto out;
 
 	/* extract some info from the scsi command for pde*/
-	reftag = t10_pi_ref_tag(sc->request);
+	reftag = t10_pi_ref_tag(scsi_cmd_to_rq(sc));
 	if (reftag == LPFC_INVALID_REFTAG)
 		goto out;
 
@@ -1756,7 +1756,7 @@ lpfc_bg_setup_bpl_prot(struct lpfc_hba *phba, struct scsi_cmnd *sc,
 
 	/* extract some info from the scsi command */
 	blksize = lpfc_cmd_blksize(sc);
-	reftag = t10_pi_ref_tag(sc->request);
+	reftag = t10_pi_ref_tag(scsi_cmd_to_rq(sc));
 	if (reftag == LPFC_INVALID_REFTAG)
 		goto out;
 
@@ -1987,7 +1987,7 @@ lpfc_bg_setup_sgl(struct lpfc_hba *phba, struct scsi_cmnd *sc,
 		goto out;
 
 	/* extract some info from the scsi command for pde*/
-	reftag = t10_pi_ref_tag(sc->request);
+	reftag = t10_pi_ref_tag(scsi_cmd_to_rq(sc));
 	if (reftag == LPFC_INVALID_REFTAG)
 		goto out;
 
@@ -2188,7 +2188,7 @@ lpfc_bg_setup_sgl_prot(struct lpfc_hba *phba, struct scsi_cmnd *sc,
 
 	/* extract some info from the scsi command */
 	blksize = lpfc_cmd_blksize(sc);
-	reftag = t10_pi_ref_tag(sc->request);
+	reftag = t10_pi_ref_tag(scsi_cmd_to_rq(sc));
 	if (reftag == LPFC_INVALID_REFTAG)
 		goto out;
 
@@ -2782,7 +2782,7 @@ lpfc_calc_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd)
 			chk_guard = 1;
 
 		src = (struct scsi_dif_tuple *)sg_virt(sgpe);
-		start_ref_tag = t10_pi_ref_tag(cmd->request);
+		start_ref_tag = t10_pi_ref_tag(scsi_cmd_to_rq(cmd));
 		if (start_ref_tag == LPFC_INVALID_REFTAG)
 			goto out;
 		start_app_tag = src->app_tag;
@@ -2876,7 +2876,7 @@ lpfc_calc_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd)
 		phba->bg_guard_err_cnt++;
 		lpfc_printf_log(phba, KERN_WARNING, LOG_FCP | LOG_BG,
 				"9069 BLKGRD: reftag %x grd_tag err %x != %x\n",
-				t10_pi_ref_tag(cmd->request),
+				t10_pi_ref_tag(scsi_cmd_to_rq(cmd)),
 				sum, guard_tag);
 
 	} else if (err_type == BGS_REFTAG_ERR_MASK) {
@@ -2888,7 +2888,7 @@ lpfc_calc_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd)
 		phba->bg_reftag_err_cnt++;
 		lpfc_printf_log(phba, KERN_WARNING, LOG_FCP | LOG_BG,
 				"9066 BLKGRD: reftag %x ref_tag err %x != %x\n",
-				t10_pi_ref_tag(cmd->request),
+				t10_pi_ref_tag(scsi_cmd_to_rq(cmd)),
 				ref_tag, start_ref_tag);
 
 	} else if (err_type == BGS_APPTAG_ERR_MASK) {
@@ -2900,7 +2900,7 @@ lpfc_calc_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd)
 		phba->bg_apptag_err_cnt++;
 		lpfc_printf_log(phba, KERN_WARNING, LOG_FCP | LOG_BG,
 				"9041 BLKGRD: reftag %x app_tag err %x != %x\n",
-				t10_pi_ref_tag(cmd->request),
+				t10_pi_ref_tag(scsi_cmd_to_rq(cmd)),
 				app_tag, start_app_tag);
 	}
 }
@@ -2964,7 +2964,7 @@ lpfc_sli4_parse_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd,
 				" 0x%x lba 0x%llx blk cnt 0x%x "
 				"bgstat=x%x bghm=x%x\n", cmd->cmnd[0],
 				(unsigned long long)scsi_get_lba(cmd),
-				blk_rq_sectors(cmd->request), bgstat, bghm);
+				blk_rq_sectors(scsi_cmd_to_rq(cmd)), bgstat, bghm);
 	}
 
 	if (lpfc_bgs_get_reftag_err(bgstat)) {
@@ -2981,7 +2981,7 @@ lpfc_sli4_parse_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd,
 				" 0x%x lba 0x%llx blk cnt 0x%x "
 				"bgstat=x%x bghm=x%x\n", cmd->cmnd[0],
 				(unsigned long long)scsi_get_lba(cmd),
-				blk_rq_sectors(cmd->request), bgstat, bghm);
+				blk_rq_sectors(scsi_cmd_to_rq(cmd)), bgstat, bghm);
 	}
 
 	if (lpfc_bgs_get_apptag_err(bgstat)) {
@@ -2998,7 +2998,7 @@ lpfc_sli4_parse_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd,
 				" 0x%x lba 0x%llx blk cnt 0x%x "
 				"bgstat=x%x bghm=x%x\n", cmd->cmnd[0],
 				(unsigned long long)scsi_get_lba(cmd),
-				blk_rq_sectors(cmd->request), bgstat, bghm);
+				blk_rq_sectors(scsi_cmd_to_rq(cmd)), bgstat, bghm);
 	}
 
 	if (lpfc_bgs_get_hi_water_mark_present(bgstat)) {
@@ -3042,7 +3042,7 @@ lpfc_sli4_parse_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd,
 				" 0x%x lba 0x%llx blk cnt 0x%x "
 				"bgstat=x%x bghm=x%x\n", cmd->cmnd[0],
 				(unsigned long long)scsi_get_lba(cmd),
-				blk_rq_sectors(cmd->request), bgstat, bghm);
+				blk_rq_sectors(scsi_cmd_to_rq(cmd)), bgstat, bghm);
 
 		/* Calcuate what type of error it was */
 		lpfc_calc_bg_err(phba, lpfc_cmd);
@@ -3079,8 +3079,8 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd,
 				"9072 BLKGRD: Invalid BG Profile in cmd "
 				"0x%x reftag 0x%x blk cnt 0x%x "
 				"bgstat=x%x bghm=x%x\n", cmd->cmnd[0],
-				t10_pi_ref_tag(cmd->request),
-				blk_rq_sectors(cmd->request), bgstat, bghm);
+				t10_pi_ref_tag(scsi_cmd_to_rq(cmd)),
+				blk_rq_sectors(scsi_cmd_to_rq(cmd)), bgstat, bghm);
 		ret = (-1);
 		goto out;
 	}
@@ -3091,8 +3091,8 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd,
 				"9073 BLKGRD: Invalid BG PDIF Block in cmd "
 				"0x%x reftag 0x%x blk cnt 0x%x "
 				"bgstat=x%x bghm=x%x\n", cmd->cmnd[0],
-				t10_pi_ref_tag(cmd->request),
-				blk_rq_sectors(cmd->request), bgstat, bghm);
+				t10_pi_ref_tag(scsi_cmd_to_rq(cmd)),
+				blk_rq_sectors(scsi_cmd_to_rq(cmd)), bgstat, bghm);
 		ret = (-1);
 		goto out;
 	}
@@ -3109,8 +3109,8 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd,
 				"9055 BLKGRD: Guard Tag error in cmd "
 				"0x%x reftag 0x%x blk cnt 0x%x "
 				"bgstat=x%x bghm=x%x\n", cmd->cmnd[0],
-				t10_pi_ref_tag(cmd->request),
-				blk_rq_sectors(cmd->request), bgstat, bghm);
+				t10_pi_ref_tag(scsi_cmd_to_rq(cmd)),
+				blk_rq_sectors(scsi_cmd_to_rq(cmd)), bgstat, bghm);
 	}
 
 	if (lpfc_bgs_get_reftag_err(bgstat)) {
@@ -3126,8 +3126,8 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd,
 				"9056 BLKGRD: Ref Tag error in cmd "
 				"0x%x reftag 0x%x blk cnt 0x%x "
 				"bgstat=x%x bghm=x%x\n", cmd->cmnd[0],
-				t10_pi_ref_tag(cmd->request),
-				blk_rq_sectors(cmd->request), bgstat, bghm);
+				t10_pi_ref_tag(scsi_cmd_to_rq(cmd)),
+				blk_rq_sectors(scsi_cmd_to_rq(cmd)), bgstat, bghm);
 	}
 
 	if (lpfc_bgs_get_apptag_err(bgstat)) {
@@ -3143,8 +3143,8 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd,
 				"9061 BLKGRD: App Tag error in cmd "
 				"0x%x reftag 0x%x blk cnt 0x%x "
 				"bgstat=x%x bghm=x%x\n", cmd->cmnd[0],
-				t10_pi_ref_tag(cmd->request),
-				blk_rq_sectors(cmd->request), bgstat, bghm);
+				t10_pi_ref_tag(scsi_cmd_to_rq(cmd)),
+				blk_rq_sectors(scsi_cmd_to_rq(cmd)), bgstat, bghm);
 	}
 
 	if (lpfc_bgs_get_hi_water_mark_present(bgstat)) {
@@ -3187,8 +3187,8 @@ lpfc_parse_bg_err(struct lpfc_hba *phba, struct lpfc_io_buf *lpfc_cmd,
 				"9057 BLKGRD: Unknown error in cmd "
 				"0x%x reftag 0x%x blk cnt 0x%x "
 				"bgstat=x%x bghm=x%x\n", cmd->cmnd[0],
-				t10_pi_ref_tag(cmd->request),
-				blk_rq_sectors(cmd->request), bgstat, bghm);
+				t10_pi_ref_tag(scsi_cmd_to_rq(cmd)),
+				blk_rq_sectors(scsi_cmd_to_rq(cmd)), bgstat, bghm);
 
 		/* Calcuate what type of error it was */
 		lpfc_calc_bg_err(phba, lpfc_cmd);
@@ -5269,8 +5269,8 @@ lpfc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *cmnd)
 					 "reftag x%x cnt %u pt %x\n",
 					 dif_op_str[scsi_get_prot_op(cmnd)],
 					 cmnd->cmnd[0],
-					 t10_pi_ref_tag(cmnd->request),
-					 blk_rq_sectors(cmnd->request),
+					 t10_pi_ref_tag(scsi_cmd_to_rq(cmnd)),
+					 blk_rq_sectors(scsi_cmd_to_rq(cmnd)),
 					 (cmnd->cmnd[1]>>5));
 		}
 		err = lpfc_bg_scsi_prep_dma_buf(phba, lpfc_cmd);
@@ -5281,8 +5281,8 @@ lpfc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *cmnd)
 					 "9038 BLKGRD: rcvd PROT_NORMAL cmd: "
 					 "x%x reftag x%x cnt %u pt %x\n",
 					 cmnd->cmnd[0],
-					 t10_pi_ref_tag(cmnd->request),
-					 blk_rq_sectors(cmnd->request),
+					 t10_pi_ref_tag(scsi_cmd_to_rq(cmnd)),
+					 blk_rq_sectors(scsi_cmd_to_rq(cmnd)),
 					 (cmnd->cmnd[1]>>5));
 		}
 		err = lpfc_scsi_prep_dma_buf(phba, lpfc_cmd);
@@ -5334,8 +5334,7 @@ lpfc_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *cmnd)
 				   bf_get(wqe_tmo,
 				   &lpfc_cmd->cur_iocbq.wqe.generic.wqe_com) :
 				   lpfc_cmd->cur_iocbq.iocb.ulpTimeout,
-				   (uint32_t)
-				   (cmnd->request->timeout / 1000));
+				   (uint32_t)(scsi_cmd_to_rq(cmnd)->timeout / 1000));
 
 		goto out_host_busy_free_buf;
 	}

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 27/50] megaraid: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (25 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 26/50] lpfc: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-19  7:43   ` Sumit Saxena
  2021-05-18 17:44 ` [PATCH v2 28/50] mpt3sas: " Bart Van Assche
                   ` (23 subsequent siblings)
  50 siblings, 1 reply; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Kashyap Desai, Sumit Saxena,
	Shivasharan S, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/megaraid/megaraid_sas_base.c   |  4 ++--
 drivers/scsi/megaraid/megaraid_sas_fusion.c | 10 +++++-----
 2 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index 8ed347eebf07..8fc7a3074a21 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -1443,10 +1443,10 @@ megasas_build_dcdb(struct megasas_instance *instance, struct scsi_cmnd *scp,
 	 * pthru timeout to the os layer timeout value.
 	 */
 	if (scp->device->type == TYPE_TAPE) {
-		if ((scp->request->timeout / HZ) > 0xFFFF)
+		if (scsi_cmd_to_rq(scp)->timeout / HZ > 0xFFFF)
 			pthru->timeout = cpu_to_le16(0xFFFF);
 		else
-			pthru->timeout = cpu_to_le16(scp->request->timeout / HZ);
+			pthru->timeout = cpu_to_le16(scsi_cmd_to_rq(scp)->timeout / HZ);
 	}
 
 	/*
diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
index 2221175ae051..b894451a3e09 100644
--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
@@ -402,7 +402,7 @@ megasas_get_msix_index(struct megasas_instance *instance,
 			(mega_mod64(atomic64_add_return(1, &instance->total_io_count),
 				instance->msix_vectors));
 	} else if (instance->host->nr_hw_queues > 1) {
-		u32 tag = blk_mq_unique_tag(scmd->request);
+		u32 tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd));
 
 		cmd->request_desc->SCSIIO.MSIxIndex = blk_mq_unique_tag_to_hwq(tag) +
 			instance->low_latency_index_start;
@@ -3024,7 +3024,7 @@ static void megasas_build_ld_nonrw_fusion(struct megasas_instance *instance,
 		io_request->DevHandle = cpu_to_le16(device_id);
 		io_request->LUN[1] = scmd->device->lun;
 		pRAID_Context->timeout_value =
-			cpu_to_le16 (scmd->request->timeout / HZ);
+			cpu_to_le16(scsi_cmd_to_rq(scmd)->timeout / HZ);
 		cmd->request_desc->SCSIIO.RequestFlags =
 			(MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO <<
 			MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT);
@@ -3087,7 +3087,7 @@ megasas_build_syspd_fusion(struct megasas_instance *instance,
 
 	device_id = MEGASAS_DEV_INDEX(scmd);
 	pd_index = MEGASAS_PD_INDEX(scmd);
-	os_timeout_value = scmd->request->timeout / HZ;
+	os_timeout_value = scsi_cmd_to_rq(scmd)->timeout / HZ;
 	mr_device_priv_data = scmd->device->hostdata;
 	cmd->pd_interface = mr_device_priv_data->interface_type;
 
@@ -3376,7 +3376,7 @@ megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance,
 		return SCSI_MLQUEUE_HOST_BUSY;
 	}
 
-	cmd = megasas_get_cmd_fusion(instance, scmd->request->tag);
+	cmd = megasas_get_cmd_fusion(instance, scsi_cmd_to_rq(scmd)->tag);
 
 	if (!cmd) {
 		atomic_dec(&instance->fw_outstanding);
@@ -3417,7 +3417,7 @@ megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance,
 	 */
 	if (cmd->r1_alt_dev_handle != MR_DEVHANDLE_INVALID) {
 		r1_cmd = megasas_get_cmd_fusion(instance,
-				(scmd->request->tag + instance->max_fw_cmds));
+				scsi_cmd_to_rq(scmd)->tag + instance->max_fw_cmds);
 		megasas_prepare_secondRaid1_IO(instance, cmd, r1_cmd);
 	}
 

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 28/50] mpt3sas: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (26 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 27/50] megaraid: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 29/50] mvumi: " Bart Van Assche
                   ` (22 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Sathya Prakash, Sreekanth Reddy,
	Suganath Prabu Subramani, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/mpt3sas/mpt3sas_base.c  | 4 ++--
 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 6 +++---
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c
index 68fde055b02f..352526cdcb2d 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_base.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_base.c
@@ -3649,7 +3649,7 @@ _base_get_msix_index(struct MPT3SAS_ADAPTER *ioc,
 		    &ioc->total_io_cnt), ioc->reply_queue_count) : 0;
 
 	if (scmd && ioc->shost->nr_hw_queues > 1) {
-		u32 tag = blk_mq_unique_tag(scmd->request);
+		u32 tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd));
 
 		return blk_mq_unique_tag_to_hwq(tag) +
 			ioc->high_iops_queues;
@@ -3733,7 +3733,7 @@ mpt3sas_base_get_smid_scsiio(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx,
 	u16 smid;
 	u32 tag, unique_tag;
 
-	unique_tag = blk_mq_unique_tag(scmd->request);
+	unique_tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd));
 	tag = blk_mq_unique_tag_to_tag(unique_tag);
 
 	/*
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index d00aca3c77ce..c05abb458f57 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -3303,7 +3303,7 @@ scsih_abort(struct scsi_cmnd *scmd)
 	sdev_printk(KERN_INFO, scmd->device, "attempting task abort!"
 	    "scmd(0x%p), outstanding for %u ms & timeout %u ms\n",
 	    scmd, jiffies_to_msecs(jiffies - scmd->jiffies_at_alloc),
-	    (scmd->request->timeout / HZ) * 1000);
+	    (scsi_cmd_to_rq(scmd)->timeout / HZ) * 1000);
 	_scsih_tm_display_info(ioc, scmd);
 
 	sas_device_priv_data = scmd->device->hostdata;
@@ -5032,7 +5032,7 @@ _scsih_setup_eedp(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
 		    MPI2_SCSIIO_EEDPFLAGS_CHECK_REFTAG |
 		    MPI2_SCSIIO_EEDPFLAGS_CHECK_GUARD;
 		mpi_request->CDB.EEDP32.PrimaryReferenceTag =
-		    cpu_to_be32(t10_pi_ref_tag(scmd->request));
+		    cpu_to_be32(t10_pi_ref_tag(scsi_cmd_to_rq(scmd)));
 		break;
 
 	case SCSI_PROT_DIF_TYPE3:
@@ -5101,7 +5101,7 @@ scsih_qcmd(struct Scsi_Host *shost, struct scsi_cmnd *scmd)
 	struct MPT3SAS_DEVICE *sas_device_priv_data;
 	struct MPT3SAS_TARGET *sas_target_priv_data;
 	struct _raid_device *raid_device;
-	struct request *rq = scmd->request;
+	struct request *rq = scsi_cmd_to_rq(scmd);
 	int class;
 	Mpi25SCSIIORequest_t *mpi_request;
 	struct _pcie_device *pcie_device = NULL;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 29/50] mvumi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (27 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 28/50] mpt3sas: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 30/50] myrb: " Bart Van Assche
                   ` (21 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen; +Cc: linux-scsi, Bart Van Assche, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/mvumi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/mvumi.c b/drivers/scsi/mvumi.c
index 9d5743627604..94b2b207d391 100644
--- a/drivers/scsi/mvumi.c
+++ b/drivers/scsi/mvumi.c
@@ -702,7 +702,7 @@ static int mvumi_host_reset(struct scsi_cmnd *scmd)
 	mhba = (struct mvumi_hba *) scmd->device->host->hostdata;
 
 	scmd_printk(KERN_NOTICE, scmd, "RESET -%u cmd=%x retries=%x\n",
-			scmd->request->tag, scmd->cmnd[0], scmd->retries);
+			scsi_cmd_to_rq(scmd)->tag, scmd->cmnd[0], scmd->retries);
 
 	return mhba->instancet->reset_host(mhba);
 }

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 30/50] myrb: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (28 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 29/50] mvumi: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 31/50] myrs: " Bart Van Assche
                   ` (20 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Hannes Reinecke, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/myrb.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/myrb.c b/drivers/scsi/myrb.c
index d9c82e211ae7..27aabe1e635a 100644
--- a/drivers/scsi/myrb.c
+++ b/drivers/scsi/myrb.c
@@ -1263,6 +1263,7 @@ static int myrb_host_reset(struct scsi_cmnd *scmd)
 static int myrb_pthru_queuecommand(struct Scsi_Host *shost,
 		struct scsi_cmnd *scmd)
 {
+	struct request *rq = scsi_cmd_to_rq(scmd);
 	struct myrb_hba *cb = shost_priv(shost);
 	struct myrb_cmdblk *cmd_blk = scsi_cmd_priv(scmd);
 	union myrb_cmd_mbox *mbox = &cmd_blk->mbox;
@@ -1286,7 +1287,7 @@ static int myrb_pthru_queuecommand(struct Scsi_Host *shost,
 	}
 
 	mbox->type3.opcode = MYRB_CMD_DCDB;
-	mbox->type3.id = scmd->request->tag + 3;
+	mbox->type3.id = rq->tag + 3;
 	mbox->type3.addr = dcdb_addr;
 	dcdb->channel = sdev->channel;
 	dcdb->target = sdev->id;
@@ -1305,11 +1306,11 @@ static int myrb_pthru_queuecommand(struct Scsi_Host *shost,
 		break;
 	}
 	dcdb->early_status = false;
-	if (scmd->request->timeout <= 10)
+	if (rq->timeout <= 10)
 		dcdb->timeout = MYRB_DCDB_TMO_10_SECS;
-	else if (scmd->request->timeout <= 60)
+	else if (rq->timeout <= 60)
 		dcdb->timeout = MYRB_DCDB_TMO_60_SECS;
-	else if (scmd->request->timeout <= 600)
+	else if (rq->timeout <= 600)
 		dcdb->timeout = MYRB_DCDB_TMO_10_MINS;
 	else
 		dcdb->timeout = MYRB_DCDB_TMO_24_HRS;
@@ -1577,7 +1578,7 @@ static int myrb_ldev_queuecommand(struct Scsi_Host *shost,
 	}
 
 	myrb_reset_cmd(cmd_blk);
-	mbox->type5.id = scmd->request->tag + 3;
+	mbox->type5.id = scsi_cmd_to_rq(scmd)->tag + 3;
 	if (scmd->sc_data_direction == DMA_NONE)
 		goto submit;
 	nsge = scsi_dma_map(scmd);

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 31/50] myrs: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (29 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 30/50] myrb: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 32/50] ncr53c8xx: " Bart Van Assche
                   ` (19 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Hannes Reinecke, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/myrs.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/myrs.c b/drivers/scsi/myrs.c
index 3b68c68d1716..9b3090d59bb9 100644
--- a/drivers/scsi/myrs.c
+++ b/drivers/scsi/myrs.c
@@ -1582,6 +1582,7 @@ static void myrs_mode_sense(struct myrs_hba *cs, struct scsi_cmnd *scmd,
 static int myrs_queuecommand(struct Scsi_Host *shost,
 		struct scsi_cmnd *scmd)
 {
+	struct request *rq = scsi_cmd_to_rq(scmd);
 	struct myrs_hba *cs = shost_priv(shost);
 	struct myrs_cmdblk *cmd_blk = scsi_cmd_priv(scmd);
 	union myrs_cmd_mbox *mbox = &cmd_blk->mbox;
@@ -1633,7 +1634,7 @@ static int myrs_queuecommand(struct Scsi_Host *shost,
 		return SCSI_MLQUEUE_HOST_BUSY;
 	cmd_blk->sense_addr = sense_addr;
 
-	timeout = scmd->request->timeout;
+	timeout = rq->timeout;
 	if (scmd->cmd_len <= 10) {
 		if (scmd->device->channel >= cs->ctlr_info->physchan_present) {
 			struct myrs_ldev_info *ldev_info = sdev->hostdata;
@@ -1649,10 +1650,10 @@ static int myrs_queuecommand(struct Scsi_Host *shost,
 			mbox->SCSI_10.pdev.target = sdev->id;
 			mbox->SCSI_10.pdev.channel = sdev->channel;
 		}
-		mbox->SCSI_10.id = scmd->request->tag + 3;
+		mbox->SCSI_10.id = rq->tag + 3;
 		mbox->SCSI_10.control.dma_ctrl_to_host =
 			(scmd->sc_data_direction == DMA_FROM_DEVICE);
-		if (scmd->request->cmd_flags & REQ_FUA)
+		if (rq->cmd_flags & REQ_FUA)
 			mbox->SCSI_10.control.fua = true;
 		mbox->SCSI_10.dma_size = scsi_bufflen(scmd);
 		mbox->SCSI_10.sense_addr = cmd_blk->sense_addr;
@@ -1695,10 +1696,10 @@ static int myrs_queuecommand(struct Scsi_Host *shost,
 			mbox->SCSI_255.pdev.target = sdev->id;
 			mbox->SCSI_255.pdev.channel = sdev->channel;
 		}
-		mbox->SCSI_255.id = scmd->request->tag + 3;
+		mbox->SCSI_255.id = rq->tag + 3;
 		mbox->SCSI_255.control.dma_ctrl_to_host =
 			(scmd->sc_data_direction == DMA_FROM_DEVICE);
-		if (scmd->request->cmd_flags & REQ_FUA)
+		if (rq->cmd_flags & REQ_FUA)
 			mbox->SCSI_255.control.fua = true;
 		mbox->SCSI_255.dma_size = scsi_bufflen(scmd);
 		mbox->SCSI_255.sense_addr = cmd_blk->sense_addr;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 32/50] ncr53c8xx: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (30 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 31/50] myrs: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 33/50] qedf: " Bart Van Assche
                   ` (18 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen; +Cc: linux-scsi, Bart Van Assche, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/ncr53c8xx.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/ncr53c8xx.c b/drivers/scsi/ncr53c8xx.c
index c76e9f05d042..09958f78b70f 100644
--- a/drivers/scsi/ncr53c8xx.c
+++ b/drivers/scsi/ncr53c8xx.c
@@ -4164,8 +4164,8 @@ static int ncr_queue_command (struct ncb *np, struct scsi_cmnd *cmd)
 	**
 	**----------------------------------------------------
 	*/
-	if (np->settle_time && cmd->request->timeout >= HZ) {
-		u_long tlimit = jiffies + cmd->request->timeout - HZ;
+	if (np->settle_time && scsi_cmd_to_rq(cmd)->timeout >= HZ) {
+		u_long tlimit = jiffies + scsi_cmd_to_rq(cmd)->timeout - HZ;
 		if (time_after(np->settle_time, tlimit))
 			np->settle_time = tlimit;
 	}

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 33/50] qedf: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (31 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 32/50] ncr53c8xx: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 34/50] qedi: " Bart Van Assche
                   ` (17 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Saurav Kashyap, Javed Hasan,
	GR-QLogic-Storage-Upstream, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/qedf/qedf_io.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/scsi/qedf/qedf_io.c b/drivers/scsi/qedf/qedf_io.c
index 6184bc485811..73f29e0e9a5c 100644
--- a/drivers/scsi/qedf/qedf_io.c
+++ b/drivers/scsi/qedf/qedf_io.c
@@ -1162,13 +1162,7 @@ void qedf_scsi_completion(struct qedf_ctx *qedf, struct fcoe_cqe *cqe,
 		return;
 	}
 
-	if (!sc_cmd->request) {
-		QEDF_WARN(&(qedf->dbg_ctx), "sc_cmd->request is NULL, "
-		    "sc_cmd=%p.\n", sc_cmd);
-		return;
-	}
-
-	if (!sc_cmd->request->q) {
+	if (!scsi_cmd_to_rq(sc_cmd)->q) {
 		QEDF_WARN(&(qedf->dbg_ctx), "request->q is NULL so request "
 		   "is not valid, sc_cmd=%p.\n", sc_cmd);
 		return;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 34/50] qedi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (32 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 33/50] qedf: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 35/50] qla1280: " Bart Van Assche
                   ` (16 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Nilesh Javali, Manish Rangankar,
	GR-QLogic-Storage-Upstream, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/qedi/qedi_fw.c | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/drivers/scsi/qedi/qedi_fw.c b/drivers/scsi/qedi/qedi_fw.c
index 440ddd2309f1..f371c358c8c4 100644
--- a/drivers/scsi/qedi/qedi_fw.c
+++ b/drivers/scsi/qedi/qedi_fw.c
@@ -611,14 +611,7 @@ static void qedi_scsi_completion(struct qedi_ctx *qedi,
 		goto error;
 	}
 
-	if (!sc_cmd->request) {
-		QEDI_WARN(&qedi->dbg_ctx,
-			  "sc_cmd->request is NULL, sc_cmd=%p.\n",
-			  sc_cmd);
-		goto error;
-	}
-
-	if (!sc_cmd->request->q) {
+	if (!scsi_cmd_to_rq(sc_cmd)->q) {
 		QEDI_WARN(&qedi->dbg_ctx,
 			  "request->q is NULL so request is not valid, sc_cmd=%p.\n",
 			  sc_cmd);

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 35/50] qla1280: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (33 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 34/50] qedi: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 36/50] qla2xxx: " Bart Van Assche
                   ` (15 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Michael Reed, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/qla1280.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
index 928da90b79be..15d564076707 100644
--- a/drivers/scsi/qla1280.c
+++ b/drivers/scsi/qla1280.c
@@ -490,7 +490,7 @@ __setup("qla1280=", qla1280_setup);
 #define	CMD_SNSLEN(Cmnd)	SCSI_SENSE_BUFFERSIZE
 #define	CMD_RESULT(Cmnd)	Cmnd->result
 #define	CMD_HANDLE(Cmnd)	Cmnd->host_scribble
-#define CMD_REQUEST(Cmnd)	Cmnd->request->cmd
+#define CMD_REQUEST(Cmnd)	scsi_cmd_to_rq(Cmnd)->cmd
 
 #define CMD_HOST(Cmnd)		Cmnd->device->host
 #define SCSI_BUS_32(Cmnd)	Cmnd->device->channel
@@ -2827,7 +2827,7 @@ qla1280_64bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
 	memset(((char *)pkt + 8), 0, (REQUEST_ENTRY_SIZE - 8));
 
 	/* Set ISP command timeout. */
-	pkt->timeout = cpu_to_le16(cmd->request->timeout/HZ);
+	pkt->timeout = cpu_to_le16(scsi_cmd_to_rq(cmd)->timeout / HZ);
 
 	/* Set device target ID and LUN */
 	pkt->lun = SCSI_LUN_32(cmd);
@@ -3082,7 +3082,7 @@ qla1280_32bit_start_scsi(struct scsi_qla_host *ha, struct srb * sp)
 	memset(((char *)pkt + 8), 0, (REQUEST_ENTRY_SIZE - 8));
 
 	/* Set ISP command timeout. */
-	pkt->timeout = cpu_to_le16(cmd->request->timeout/HZ);
+	pkt->timeout = cpu_to_le16(scsi_cmd_to_rq(cmd)->timeout / HZ);
 
 	/* Set device target ID and LUN */
 	pkt->lun = SCSI_LUN_32(cmd);

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 36/50] qla2xxx: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (34 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 35/50] qla1280: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 37/50] qla4xxx: " Bart Van Assche
                   ` (14 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Nilesh Javali,
	GR-QLogic-Storage-Upstream, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/qla2xxx/qla_os.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index 4eab564ea6a0..c65e85db87d5 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -849,7 +849,7 @@ qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
 		uint16_t hwq;
 		struct qla_qpair *qpair = NULL;
 
-		tag = blk_mq_unique_tag(cmd->request);
+		tag = blk_mq_unique_tag(scsi_cmd_to_rq(cmd));
 		hwq = blk_mq_unique_tag_to_hwq(tag);
 		qpair = ha->queue_pair_map[hwq];
 
@@ -1742,7 +1742,7 @@ static void qla2x00_abort_srb(struct qla_qpair *qp, srb_t *sp, const int res,
 		}
 
 		spin_lock_irqsave(qp->qp_lock_ptr, *flags);
-		if (ret_cmd && blk_mq_request_started(cmd->request))
+		if (ret_cmd && blk_mq_request_started(scsi_cmd_to_rq(cmd)))
 			sp->done(sp, res);
 	} else {
 		sp->done(sp, res);

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 37/50] qla4xxx: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (35 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 36/50] qla2xxx: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 38/50] qlogicpti: " Bart Van Assche
                   ` (13 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Nilesh Javali, Manish Rangankar,
	GR-QLogic-Storage-Upstream, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/qla4xxx/ql4_iocb.c | 2 +-
 drivers/scsi/qla4xxx/ql4_os.c   | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/qla4xxx/ql4_iocb.c b/drivers/scsi/qla4xxx/ql4_iocb.c
index cbd1e6ffcd67..d2e450831837 100644
--- a/drivers/scsi/qla4xxx/ql4_iocb.c
+++ b/drivers/scsi/qla4xxx/ql4_iocb.c
@@ -288,7 +288,7 @@ int qla4xxx_send_command_to_isp(struct scsi_qla_host *ha, struct srb * srb)
 	/* Acquire hardware specific lock */
 	spin_lock_irqsave(&ha->hardware_lock, flags);
 
-	index = (uint32_t)cmd->request->tag;
+	index = scsi_cmd_to_rq(cmd)->tag;
 
 	/*
 	 * Check to see if adapter is online before placing request on
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index ad3afe30f617..88a37dacf90f 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -9282,7 +9282,7 @@ static int qla4xxx_eh_device_reset(struct scsi_cmnd *cmd)
 	DEBUG2(printk(KERN_INFO
 		      "scsi%ld: DEVICE_RESET cmd=%p jiffies = 0x%lx, to=%x,"
 		      "dpc_flags=%lx, status=%x allowed=%d\n", ha->host_no,
-		      cmd, jiffies, cmd->request->timeout / HZ,
+		      cmd, jiffies, scsi_cmd_to_rq(cmd)->timeout / HZ,
 		      ha->dpc_flags, cmd->result, cmd->allowed));
 
 	rval = qla4xxx_isp_check_reg(ha);
@@ -9349,7 +9349,7 @@ static int qla4xxx_eh_target_reset(struct scsi_cmnd *cmd)
 	DEBUG2(printk(KERN_INFO
 		      "scsi%ld: TARGET_DEVICE_RESET cmd=%p jiffies = 0x%lx, "
 		      "to=%x,dpc_flags=%lx, status=%x allowed=%d\n",
-		      ha->host_no, cmd, jiffies, cmd->request->timeout / HZ,
+		      ha->host_no, cmd, jiffies, scsi_cmd_to_rq(cmd)->timeout / HZ,
 		      ha->dpc_flags, cmd->result, cmd->allowed));
 
 	rval = qla4xxx_isp_check_reg(ha);

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 38/50] qlogicpti: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (36 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 37/50] qla4xxx: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 39/50] scsi_debug: " Bart Van Assche
                   ` (12 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen; +Cc: linux-scsi, Bart Van Assche, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/qlogicpti.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
index d84e218d32cb..8e7e833a36cc 100644
--- a/drivers/scsi/qlogicpti.c
+++ b/drivers/scsi/qlogicpti.c
@@ -890,7 +890,7 @@ static inline void cmd_frob(struct Command_Entry *cmd, struct scsi_cmnd *Cmnd,
 		cmd->control_flags |= CFLAG_WRITE;
 	else
 		cmd->control_flags |= CFLAG_READ;
-	cmd->time_out = Cmnd->request->timeout/HZ;
+	cmd->time_out = scsi_cmd_to_rq(Cmnd)->timeout / HZ;
 	memcpy(cmd->cdb, Cmnd->cmnd, Cmnd->cmd_len);
 }
 

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 39/50] scsi_debug: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (37 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 38/50] qlogicpti: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 40/50] smartpqi: " Bart Van Assche
                   ` (11 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen; +Cc: linux-scsi, Bart Van Assche, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/scsi_debug.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 6e2ad003c179..151b0d2f49a5 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -4705,7 +4705,7 @@ static int resp_rwp_zone(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
 static struct sdebug_queue *get_queue(struct scsi_cmnd *cmnd)
 {
 	u16 hwq;
-	u32 tag = blk_mq_unique_tag(cmnd->request);
+	u32 tag = blk_mq_unique_tag(scsi_cmd_to_rq(cmnd));
 
 	hwq = blk_mq_unique_tag_to_hwq(tag);
 
@@ -4718,7 +4718,7 @@ static struct sdebug_queue *get_queue(struct scsi_cmnd *cmnd)
 
 static u32 get_tag(struct scsi_cmnd *cmnd)
 {
-	return blk_mq_unique_tag(cmnd->request);
+	return blk_mq_unique_tag(scsi_cmd_to_rq(cmnd));
 }
 
 /* Queued (deferred) command completions converge here. */
@@ -5367,7 +5367,7 @@ static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
 {
 	bool new_sd_dp;
 	bool inject = false;
-	bool hipri = (cmnd->request->cmd_flags & REQ_HIPRI);
+	bool hipri = scsi_cmd_to_rq(cmnd)->cmd_flags & REQ_HIPRI;
 	int k, num_in_q, qdepth;
 	unsigned long iflags;
 	u64 ns_from_boot = 0;
@@ -5570,8 +5570,9 @@ static int schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
 		if (sdebug_statistics)
 			sd_dp->issuing_cpu = raw_smp_processor_id();
 		if (unlikely(sd_dp->aborted)) {
-			sdev_printk(KERN_INFO, sdp, "abort request tag %d\n", cmnd->request->tag);
-			blk_abort_request(cmnd->request);
+			sdev_printk(KERN_INFO, sdp, "abort request tag %d\n",
+				    scsi_cmd_to_rq(cmnd)->tag);
+			blk_abort_request(scsi_cmd_to_rq(cmnd));
 			atomic_set(&sdeb_inject_pending, 0);
 			sd_dp->aborted = false;
 		}
@@ -7397,7 +7398,7 @@ static int scsi_debug_queuecommand(struct Scsi_Host *shost,
 					       (u32)cmd[k]);
 		}
 		sdev_printk(KERN_INFO, sdp, "%s: tag=%#x, cmd %s\n", my_name,
-			    blk_mq_unique_tag(scp->request), b);
+			    blk_mq_unique_tag(scsi_cmd_to_rq(scp)), b);
 	}
 	if (unlikely(inject_now && (sdebug_opts & SDEBUG_OPT_HOST_BUSY)))
 		return SCSI_MLQUEUE_HOST_BUSY;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 40/50] smartpqi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (38 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 39/50] scsi_debug: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 41/50] snic: " Bart Van Assche
                   ` (10 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Don Brace, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/smartpqi/smartpqi_init.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/smartpqi/smartpqi_init.c b/drivers/scsi/smartpqi/smartpqi_init.c
index 5db16509b6e1..6c841a1fa4a2 100644
--- a/drivers/scsi/smartpqi/smartpqi_init.c
+++ b/drivers/scsi/smartpqi/smartpqi_init.c
@@ -5569,7 +5569,7 @@ static inline u16 pqi_get_hw_queue(struct pqi_ctrl_info *ctrl_info,
 {
 	u16 hw_queue;
 
-	hw_queue = blk_mq_unique_tag_to_hwq(blk_mq_unique_tag(scmd->request));
+	hw_queue = blk_mq_unique_tag_to_hwq(blk_mq_unique_tag(scsi_cmd_to_rq(scmd)));
 	if (hw_queue > ctrl_info->max_hw_queue_index)
 		hw_queue = 0;
 
@@ -5578,7 +5578,7 @@ static inline u16 pqi_get_hw_queue(struct pqi_ctrl_info *ctrl_info,
 
 static inline bool pqi_is_bypass_eligible_request(struct scsi_cmnd *scmd)
 {
-	if (blk_rq_is_passthrough(scmd->request))
+	if (blk_rq_is_passthrough(scsi_cmd_to_rq(scmd)))
 		return false;
 
 	return scmd->SCp.this_residual == 0;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 41/50] snic: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (39 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 40/50] smartpqi: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 42/50] stex: " Bart Van Assche
                   ` (9 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Karan Tilak Kumar, Sesidhar Baddela,
	James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/snic/snic_scsi.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/scsi/snic/snic_scsi.c b/drivers/scsi/snic/snic_scsi.c
index 6dd0ff188bb4..d5a807c9c0d3 100644
--- a/drivers/scsi/snic/snic_scsi.c
+++ b/drivers/scsi/snic/snic_scsi.c
@@ -33,7 +33,7 @@
 #include "snic_io.h"
 #include "snic.h"
 
-#define snic_cmd_tag(sc)	(((struct scsi_cmnd *) sc)->request->tag)
+#define snic_cmd_tag(sc)	(scsi_cmd_to_rq(sc)->tag)
 
 const char *snic_state_str[] = {
 	[SNIC_INIT]	= "SNIC_INIT",
@@ -1636,7 +1636,7 @@ snic_abort_cmd(struct scsi_cmnd *sc)
 	u32 start_time = jiffies;
 
 	SNIC_SCSI_DBG(snic->shost, "abt_cmd:sc %p :0x%x :req = %p :tag = %d\n",
-		       sc, sc->cmnd[0], sc->request, tag);
+		       sc, sc->cmnd[0], scsi_cmd_to_rq(sc), tag);
 
 	if (unlikely(snic_get_state(snic) != SNIC_ONLINE)) {
 		SNIC_HOST_ERR(snic->shost,
@@ -2152,7 +2152,7 @@ snic_device_reset(struct scsi_cmnd *sc)
 	int dr_supp = 0;
 
 	SNIC_SCSI_DBG(shost, "dev_reset:sc %p :0x%x :req = %p :tag = %d\n",
-		      sc, sc->cmnd[0], sc->request,
+		      sc, sc->cmnd[0], scsi_cmd_to_rq(sc),
 		      snic_cmd_tag(sc));
 	dr_supp = snic_dev_reset_supported(sc->device);
 	if (!dr_supp) {
@@ -2387,7 +2387,7 @@ snic_host_reset(struct scsi_cmnd *sc)
 
 	SNIC_SCSI_DBG(shost,
 		      "host reset:sc %p sc_cmd 0x%x req %p tag %d flags 0x%llx\n",
-		      sc, sc->cmnd[0], sc->request,
+		      sc, sc->cmnd[0], scsi_cmd_to_rq(sc),
 		      snic_cmd_tag(sc), CMD_FLAGS(sc));
 
 	ret = snic_reset(shost, sc);
@@ -2494,7 +2494,7 @@ snic_scsi_cleanup(struct snic *snic, int ex_tag)
 		sc->result = DID_TRANSPORT_DISRUPTED << 16;
 		SNIC_HOST_INFO(snic->shost,
 			       "sc_clean: DID_TRANSPORT_DISRUPTED for sc %p, Tag %d flags 0x%llx rqi %p duration %u msecs\n",
-			       sc, sc->request->tag, CMD_FLAGS(sc), rqi,
+			       sc, scsi_cmd_to_rq(sc)->tag, CMD_FLAGS(sc), rqi,
 			       jiffies_to_msecs(jiffies - st_time));
 
 		/* Update IO stats */

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 42/50] stex: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (40 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 41/50] snic: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 43/50] sun3_scsi: " Bart Van Assche
                   ` (8 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen; +Cc: linux-scsi, Bart Van Assche, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/stex.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c
index 12471208c7a8..b6eec2e51048 100644
--- a/drivers/scsi/stex.c
+++ b/drivers/scsi/stex.c
@@ -543,7 +543,7 @@ stex_ss_send_cmd(struct st_hba *hba, struct req_msg *req, u16 tag)
 	msg_h = (struct st_msg_header *)req - 1;
 	if (likely(cmd)) {
 		msg_h->channel = (u8)cmd->device->channel;
-		msg_h->timeout = cpu_to_le16(cmd->request->timeout/HZ);
+		msg_h->timeout = cpu_to_le16(scsi_cmd_to_rq(cmd)->timeout / HZ);
 	}
 	addr = hba->dma_handle + hba->req_head * hba->rq_size;
 	addr += (hba->ccb[tag].sg_count+4)/11;
@@ -693,7 +693,7 @@ stex_queuecommand_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
 
 	cmd->scsi_done = done;
 
-	tag = cmd->request->tag;
+	tag = scsi_cmd_to_rq(cmd)->tag;
 
 	if (unlikely(tag >= host->can_queue))
 		return SCSI_MLQUEUE_HOST_BUSY;
@@ -1249,7 +1249,7 @@ static int stex_abort(struct scsi_cmnd *cmd)
 {
 	struct Scsi_Host *host = cmd->device->host;
 	struct st_hba *hba = (struct st_hba *)host->hostdata;
-	u16 tag = cmd->request->tag;
+	u16 tag = scsi_cmd_to_rq(cmd)->tag;
 	void __iomem *base;
 	u32 data;
 	int result = SUCCESS;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 43/50] sun3_scsi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (41 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 42/50] stex: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 44/50] sym53c8xx: " Bart Van Assche
                   ` (7 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Finn Thain, Michael Schmitz,
	James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/sun3_scsi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/sun3_scsi.c b/drivers/scsi/sun3_scsi.c
index 2e3fbc2fae97..d6000a397f73 100644
--- a/drivers/scsi/sun3_scsi.c
+++ b/drivers/scsi/sun3_scsi.c
@@ -336,7 +336,7 @@ static int sun3scsi_dma_xfer_len(struct NCR5380_hostdata *hostdata,
 {
 	int wanted_len = cmd->SCp.this_residual;
 
-	if (wanted_len < DMA_MIN_SIZE || blk_rq_is_passthrough(cmd->request))
+	if (wanted_len < DMA_MIN_SIZE || blk_rq_is_passthrough(scsi_cmd_to_rq(cmd)))
 		return 0;
 
 	return wanted_len;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 44/50] sym53c8xx: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (42 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 43/50] sun3_scsi: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 45/50] ufs: " Bart Van Assche
                   ` (6 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Matthew Wilcox, James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/sym53c8xx_2/sym_glue.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c
index d9a045f9858c..04cd28c268f2 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.c
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.c
@@ -502,8 +502,8 @@ static int sym53c8xx_queue_command_lck(struct scsi_cmnd *cmd,
 	 *  Shorten our settle_time if needed for 
 	 *  this command not to time out.
 	 */
-	if (np->s.settle_time_valid && cmd->request->timeout) {
-		unsigned long tlimit = jiffies + cmd->request->timeout;
+	if (np->s.settle_time_valid && scsi_cmd_to_rq(cmd)->timeout) {
+		unsigned long tlimit = jiffies + scsi_cmd_to_rq(cmd)->timeout;
 		tlimit -= SYM_CONF_TIMER_INTERVAL*2;
 		if (time_after(np->s.settle_time, tlimit)) {
 			np->s.settle_time = tlimit;

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 45/50] ufs: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (43 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 44/50] sym53c8xx: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 46/50] virtio_scsi: " Bart Van Assche
                   ` (5 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, James E.J. Bottomley, Stanley Chu,
	Can Guo, Avri Altman, Bean Huo, Jaegeuk Kim, Asutosh Das

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/ufs/ufshcd.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index d543864df7c2..7d30b5f04204 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -379,6 +379,8 @@ static void ufshcd_add_command_trace(struct ufs_hba *hba, unsigned int tag,
 	}
 
 	if (cmd) { /* data phase exists */
+		struct request *rq = scsi_cmd_to_rq(cmd);
+
 		/* trace UPIU also */
 		ufshcd_add_cmd_upiu_trace(hba, tag, str_t);
 		opcode = cmd->cmnd[0];
@@ -387,17 +389,15 @@ static void ufshcd_add_command_trace(struct ufs_hba *hba, unsigned int tag,
 			 * Currently we only fully trace read(10) and write(10)
 			 * commands
 			 */
-			if (cmd->request && cmd->request->bio)
-				lba = cmd->request->bio->bi_iter.bi_sector;
+			if (rq->bio)
+				lba = rq->bio->bi_iter.bi_sector;
 			transfer_len = be32_to_cpu(
 				lrbp->ucd_req_ptr->sc.exp_data_transfer_len);
 			if (opcode == WRITE_10)
 				group_id = lrbp->cmd->cmnd[6];
 		} else if (opcode == UNMAP) {
-			if (cmd->request) {
-				lba = scsi_get_lba(cmd);
-				transfer_len = blk_rq_bytes(cmd->request);
-			}
+			lba = scsi_get_lba(cmd);
+			transfer_len = blk_rq_bytes(rq);
 		}
 	}
 
@@ -2058,7 +2058,7 @@ static void ufshcd_update_monitor(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
 	int dir = ufshcd_monitor_opcode2dir(*lrbp->cmd->cmnd);
 
 	if (dir >= 0 && hba->monitor.nr_queued[dir] > 0) {
-		struct request *req = lrbp->cmd->request;
+		struct request *req = scsi_cmd_to_rq(lrbp->cmd);
 		struct ufs_hba_monitor *m = &hba->monitor;
 		ktime_t now, inc, lat;
 
@@ -2677,11 +2677,11 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
 
 	hba = shost_priv(host);
 
-	tag = cmd->request->tag;
+	tag = scsi_cmd_to_rq(cmd)->tag;
 	if (!ufshcd_valid_tag(hba, tag)) {
 		dev_err(hba->dev,
-			"%s: invalid command tag %d: cmd=0x%p, cmd->request=0x%p",
-			__func__, tag, cmd, cmd->request);
+			"%s: invalid command tag %d: cmd=0x%p, scsi_cmd_to_rq=0x%p",
+			__func__, tag, cmd, scsi_cmd_to_rq(cmd));
 		BUG();
 	}
 
@@ -2716,7 +2716,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
 	lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun);
 	lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed(hba) ? true : false;
 
-	ufshcd_prepare_lrbp_crypto(cmd->request, lrbp);
+	ufshcd_prepare_lrbp_crypto(scsi_cmd_to_rq(cmd), lrbp);
 
 	lrbp->req_abort_skip = false;
 
@@ -6965,12 +6965,12 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
 
 	host = cmd->device->host;
 	hba = shost_priv(host);
-	tag = cmd->request->tag;
+	tag = scsi_cmd_to_rq(cmd)->tag;
 	lrbp = &hba->lrb[tag];
 	if (!ufshcd_valid_tag(hba, tag)) {
 		dev_err(hba->dev,
-			"%s: invalid command tag %d: cmd=0x%p, cmd->request=0x%p",
-			__func__, tag, cmd, cmd->request);
+			"%s: invalid command tag %d: cmd=0x%p, scsi_cmd_to_rq=0x%p",
+			__func__, tag, cmd, scsi_cmd_to_rq(cmd));
 		BUG();
 	}
 

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 46/50] virtio_scsi: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (44 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 45/50] ufs: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 47/50] xen-scsifront: " Bart Van Assche
                   ` (4 subsequent siblings)
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Michael S. Tsirkin, Jason Wang,
	James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/virtio_scsi.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/virtio_scsi.c b/drivers/scsi/virtio_scsi.c
index b9c86a7e3b97..8ae4b8441519 100644
--- a/drivers/scsi/virtio_scsi.c
+++ b/drivers/scsi/virtio_scsi.c
@@ -521,7 +521,7 @@ static void virtio_scsi_init_hdr_pi(struct virtio_device *vdev,
 				    struct virtio_scsi_cmd_req_pi *cmd_pi,
 				    struct scsi_cmnd *sc)
 {
-	struct request *rq = sc->request;
+	struct request *rq = scsi_cmd_to_rq(sc);
 	struct blk_integrity *bi;
 
 	virtio_scsi_init_hdr(vdev, (struct virtio_scsi_cmd_req *)cmd_pi, sc);
@@ -545,7 +545,7 @@ static void virtio_scsi_init_hdr_pi(struct virtio_device *vdev,
 static struct virtio_scsi_vq *virtscsi_pick_vq_mq(struct virtio_scsi *vscsi,
 						  struct scsi_cmnd *sc)
 {
-	u32 tag = blk_mq_unique_tag(sc->request);
+	u32 tag = blk_mq_unique_tag(scsi_cmd_to_rq(sc));
 	u16 hwq = blk_mq_unique_tag_to_hwq(tag);
 
 	return &vscsi->req_vqs[hwq];

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 47/50] xen-scsifront: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (45 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 46/50] virtio_scsi: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-19  9:20   ` Juergen Gross
  2021-05-18 17:44 ` [PATCH v2 48/50] tcm_loop: " Bart Van Assche
                   ` (3 subsequent siblings)
  50 siblings, 1 reply; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Juergen Gross, Boris Ostrovsky,
	James E.J. Bottomley

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/xen-scsifront.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/xen-scsifront.c b/drivers/scsi/xen-scsifront.c
index 259fc248d06c..efb95e222e70 100644
--- a/drivers/scsi/xen-scsifront.c
+++ b/drivers/scsi/xen-scsifront.c
@@ -212,7 +212,7 @@ static int scsifront_do_request(struct vscsifrnt_info *info,
 	memcpy(ring_req->cmnd, sc->cmnd, sc->cmd_len);
 
 	ring_req->sc_data_direction   = (uint8_t)sc->sc_data_direction;
-	ring_req->timeout_per_command = sc->request->timeout / HZ;
+	ring_req->timeout_per_command = scsi_cmd_to_rq(sc)->timeout / HZ;
 
 	for (i = 0; i < (shadow->nr_segments & ~VSCSIIF_SG_GRANT); i++)
 		ring_req->seg[i] = shadow->seg[i];

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 48/50] tcm_loop: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (46 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 47/50] xen-scsifront: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-19 18:14   ` Bodo Stroesser
  2021-05-18 17:44 ` [PATCH v2 49/50] usb-storage: " Bart Van Assche
                   ` (2 subsequent siblings)
  50 siblings, 1 reply; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Mike Christie, Himanshu Madhani,
	Bodo Stroesser

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/target/loopback/tcm_loop.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
index 2687fd7d45db..834eceaac9cd 100644
--- a/drivers/target/loopback/tcm_loop.c
+++ b/drivers/target/loopback/tcm_loop.c
@@ -183,7 +183,7 @@ static int tcm_loop_queuecommand(struct Scsi_Host *sh, struct scsi_cmnd *sc)
 
 	memset(tl_cmd, 0, sizeof(*tl_cmd));
 	tl_cmd->sc = sc;
-	tl_cmd->sc_cmd_tag = sc->request->tag;
+	tl_cmd->sc_cmd_tag = scsi_cmd_to_rq(sc)->tag;
 
 	tcm_loop_target_queue_cmd(tl_cmd);
 	return 0;
@@ -249,7 +249,7 @@ static int tcm_loop_abort_task(struct scsi_cmnd *sc)
 	tl_hba = *(struct tcm_loop_hba **)shost_priv(sc->device->host);
 	tl_tpg = &tl_hba->tl_hba_tpgs[sc->device->id];
 	ret = tcm_loop_issue_tmr(tl_tpg, sc->device->lun,
-				 sc->request->tag, TMR_ABORT_TASK);
+				 scsi_cmd_to_rq(sc)->tag, TMR_ABORT_TASK);
 	return (ret == TMR_FUNCTION_COMPLETE) ? SUCCESS : FAILED;
 }
 

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 49/50] usb-storage: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (47 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 48/50] tcm_loop: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:44 ` [PATCH v2 50/50] core: Remove the request member from struct scsi_cmnd Bart Van Assche
  2021-05-18 17:55 ` [PATCH v2 00/50] Remove the request pointer " James Bottomley
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Alan Stern, Greg Kroah-Hartman

Prepare for removal of the request pointer by using scsi_cmd_to_rq()
instead. This patch does not change any functionality.

Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/usb/storage/transport.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c
index f4304ce69350..4c5a0a49035f 100644
--- a/drivers/usb/storage/transport.c
+++ b/drivers/usb/storage/transport.c
@@ -551,7 +551,7 @@ static void last_sector_hacks(struct us_data *us, struct scsi_cmnd *srb)
 	/* Did this command access the last sector? */
 	sector = (srb->cmnd[2] << 24) | (srb->cmnd[3] << 16) |
 			(srb->cmnd[4] << 8) | (srb->cmnd[5]);
-	disk = srb->request->rq_disk;
+	disk = scsi_cmd_to_rq(srb)->rq_disk;
 	if (!disk)
 		goto done;
 	sdkp = scsi_disk(disk);

^ permalink raw reply	[flat|nested] 60+ messages in thread

* [PATCH v2 50/50] core: Remove the request member from struct scsi_cmnd
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (48 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 49/50] usb-storage: " Bart Van Assche
@ 2021-05-18 17:44 ` Bart Van Assche
  2021-05-18 17:55 ` [PATCH v2 00/50] Remove the request pointer " James Bottomley
  50 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 17:44 UTC (permalink / raw)
  To: Martin K . Petersen
  Cc: linux-scsi, Bart Van Assche, Christoph Hellwig, Hannes Reinecke,
	Ming Lei, James E.J. Bottomley

Since all scsi_cmnd.request users are gone, remove the request pointer
from struct scsi_cmnd.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
 drivers/scsi/scsi_error.c | 1 -
 drivers/scsi/scsi_lib.c   | 1 -
 include/scsi/scsi_cmnd.h  | 3 ---
 3 files changed, 5 deletions(-)

diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 5af6d87e83aa..3c83e892284b 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -2390,7 +2390,6 @@ scsi_ioctl_reset(struct scsi_device *dev, int __user *arg)
 
 	scmd = (struct scsi_cmnd *)(rq + 1);
 	scsi_init_command(dev, scmd);
-	scmd->request = rq;
 	scmd->cmnd = scsi_req(rq)->cmd;
 
 	scmd->scsi_done		= scsi_reset_provider_done_command;
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 2e9598c91cee..b5df3f94156e 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1536,7 +1536,6 @@ static blk_status_t scsi_prepare_cmd(struct request *req)
 
 	scsi_init_command(sdev, cmd);
 
-	cmd->request = req;
 	cmd->tag = req->tag;
 	cmd->prot_op = SCSI_PROT_NORMAL;
 	if (blk_rq_bytes(req))
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
index bd7f73f035be..984bfa5deab8 100644
--- a/include/scsi/scsi_cmnd.h
+++ b/include/scsi/scsi_cmnd.h
@@ -111,9 +111,6 @@ struct scsi_cmnd {
 				   reconnects.   Probably == sector
 				   size */
 
-	struct request *request;	/* The command we are
-				   	   working on */
-
 	unsigned char *sense_buffer;
 				/* obtained by REQUEST SENSE when
 				 * CHECK CONDITION is received on original

^ permalink raw reply	[flat|nested] 60+ messages in thread

* Re: [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd
  2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
                   ` (49 preceding siblings ...)
  2021-05-18 17:44 ` [PATCH v2 50/50] core: Remove the request member from struct scsi_cmnd Bart Van Assche
@ 2021-05-18 17:55 ` James Bottomley
  2021-05-18 21:21   ` Bart Van Assche
  50 siblings, 1 reply; 60+ messages in thread
From: James Bottomley @ 2021-05-18 17:55 UTC (permalink / raw)
  To: Bart Van Assche, Martin K . Petersen; +Cc: linux-scsi

On Tue, 2021-05-18 at 10:44 -0700, Bart Van Assche wrote:
> Hi Martin,
> 
> This patch series implements the following two changes for all SCSI
> drivers:
> - Use blk_mq_rq_from_pdu() instead of the request member of struct
> scsi_cmnd
>   since adding an offset to a pointer is faster than pointer
> indirection.

Are there any performance results to back up this assertion?  It's
quite a lot of churn so it would be nice to know it's worth it.

James



^ permalink raw reply	[flat|nested] 60+ messages in thread

* Re: [PATCH v2 08/50] RDMA/iser: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 ` [PATCH v2 08/50] RDMA/iser: " Bart Van Assche
@ 2021-05-18 17:58   ` Sagi Grimberg
  0 siblings, 0 replies; 60+ messages in thread
From: Sagi Grimberg @ 2021-05-18 17:58 UTC (permalink / raw)
  To: Bart Van Assche, Martin K . Petersen
  Cc: linux-scsi, Max Gurtovoy, Doug Ledford, Jason Gunthorpe

Reviewed-by: Sagi Grimberg <sagi@grimberg.me>

^ permalink raw reply	[flat|nested] 60+ messages in thread

* Re: [PATCH v2 02/50] core: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 ` [PATCH v2 02/50] core: Use scsi_cmd_to_rq() instead of scsi_cmnd.request Bart Van Assche
@ 2021-05-18 20:01   ` Douglas Gilbert
  2021-05-18 21:59     ` Bart Van Assche
  0 siblings, 1 reply; 60+ messages in thread
From: Douglas Gilbert @ 2021-05-18 20:01 UTC (permalink / raw)
  To: Bart Van Assche, Martin K . Petersen
  Cc: linux-scsi, Christoph Hellwig, Hannes Reinecke, Ming Lei,
	James E.J. Bottomley

On 2021-05-18 1:44 p.m., Bart Van Assche wrote:
> Prepare for removal of the request pointer by using scsi_cmd_to_rq()
> instead. This patch does not change any functionality.
> 
> Cc: Christoph Hellwig <hch@lst.de>
> Cc: Hannes Reinecke <hare@suse.de>
> Cc: Ming Lei <ming.lei@redhat.com>
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
> ---
>   drivers/scsi/scsi.c         |  2 +-
>   drivers/scsi/scsi_error.c   | 14 +++++++-------
>   drivers/scsi/scsi_lib.c     | 28 +++++++++++++++-------------
>   drivers/scsi/scsi_logging.c | 18 ++++++++++--------
>   include/scsi/scsi_cmnd.h    |  6 ++++--
>   include/scsi/scsi_device.h  | 16 +++++++++-------
>   6 files changed, 46 insertions(+), 38 deletions(-)
> 
> diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
> index e9e2f0e15ac8..7d545223dd59 100644
> --- a/drivers/scsi/scsi.c
> +++ b/drivers/scsi/scsi.c
> @@ -197,7 +197,7 @@ void scsi_finish_command(struct scsi_cmnd *cmd)
>   				"(result %x)\n", cmd->result));
>   
>   	good_bytes = scsi_bufflen(cmd);
> -	if (!blk_rq_is_passthrough(cmd->request)) {
> +	if (!blk_rq_is_passthrough(scsi_cmd_to_rq(cmd))) {
>   		int old_good_bytes = good_bytes;
>   		drv = scsi_cmd_to_driver(cmd);
>   		if (drv->done)
> diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
> index d8fafe77dbbe..5af6d87e83aa 100644
> --- a/drivers/scsi/scsi_error.c
> +++ b/drivers/scsi/scsi_error.c
> @@ -242,7 +242,7 @@ scsi_abort_command(struct scsi_cmnd *scmd)
>    */
>   static void scsi_eh_reset(struct scsi_cmnd *scmd)
>   {
> -	if (!blk_rq_is_passthrough(scmd->request)) {
> +	if (!blk_rq_is_passthrough(scsi_cmd_to_rq(scmd))) {
>   		struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd);
>   		if (sdrv->eh_reset)
>   			sdrv->eh_reset(scmd);
> @@ -1188,7 +1188,7 @@ static enum scsi_disposition scsi_request_sense(struct scsi_cmnd *scmd)
>   static enum scsi_disposition
>   scsi_eh_action(struct scsi_cmnd *scmd, enum scsi_disposition rtn)
>   {
> -	if (!blk_rq_is_passthrough(scmd->request)) {
> +	if (!blk_rq_is_passthrough(scsi_cmd_to_rq(scmd))) {
>   		struct scsi_driver *sdrv = scsi_cmd_to_driver(scmd);
>   		if (sdrv->eh_action)
>   			rtn = sdrv->eh_action(scmd, rtn);
> @@ -1762,16 +1762,16 @@ int scsi_noretry_cmd(struct scsi_cmnd *scmd)
>   	case DID_TIME_OUT:
>   		goto check_type;
>   	case DID_BUS_BUSY:
> -		return (scmd->request->cmd_flags & REQ_FAILFAST_TRANSPORT);
> +		return scsi_cmd_to_rq(scmd)->cmd_flags & REQ_FAILFAST_TRANSPORT;
>   	case DID_PARITY:
> -		return (scmd->request->cmd_flags & REQ_FAILFAST_DEV);
> +		return scsi_cmd_to_rq(scmd)->cmd_flags & REQ_FAILFAST_DEV;
>   	case DID_ERROR:
>   		if (msg_byte(scmd->result) == COMMAND_COMPLETE &&
>   		    status_byte(scmd->result) == RESERVATION_CONFLICT)
>   			return 0;
>   		fallthrough;
>   	case DID_SOFT_ERROR:
> -		return (scmd->request->cmd_flags & REQ_FAILFAST_DRIVER);
> +		return scsi_cmd_to_rq(scmd)->cmd_flags & REQ_FAILFAST_DRIVER;
>   	}
>   
>   	if (status_byte(scmd->result) != CHECK_CONDITION)
> @@ -1782,8 +1782,8 @@ int scsi_noretry_cmd(struct scsi_cmnd *scmd)
>   	 * assume caller has checked sense and determined
>   	 * the check condition was retryable.
>   	 */
> -	if (scmd->request->cmd_flags & REQ_FAILFAST_DEV ||
> -	    blk_rq_is_passthrough(scmd->request))
> +	if (scsi_cmd_to_rq(scmd)->cmd_flags & REQ_FAILFAST_DEV ||
> +	    blk_rq_is_passthrough(scsi_cmd_to_rq(scmd)))
>   		return 1;
>   
>   	return 0;
> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index 532304d42f00..2e9598c91cee 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -119,13 +119,15 @@ scsi_set_blocked(struct scsi_cmnd *cmd, int reason)
>   
>   static void scsi_mq_requeue_cmd(struct scsi_cmnd *cmd)
>   {
> -	if (cmd->request->rq_flags & RQF_DONTPREP) {
> -		cmd->request->rq_flags &= ~RQF_DONTPREP;
> +	struct request *rq = scsi_cmd_to_rq(cmd);
> +
> +	if (rq->rq_flags & RQF_DONTPREP) {
> +		rq->rq_flags &= ~RQF_DONTPREP;
>   		scsi_mq_uninit_cmd(cmd);
>   	} else {
>   		WARN_ON_ONCE(true);
>   	}
> -	blk_mq_requeue_request(cmd->request, true);
> +	blk_mq_requeue_request(rq, true);
>   }
>   
>   /**
> @@ -164,7 +166,7 @@ static void __scsi_queue_insert(struct scsi_cmnd *cmd, int reason, bool unbusy)
>   	 */
>   	cmd->result = 0;
>   
> -	blk_mq_requeue_request(cmd->request, true);
> +	blk_mq_requeue_request(scsi_cmd_to_rq(cmd), true);
>   }
>   
>   /**
> @@ -475,7 +477,7 @@ void scsi_run_host_queues(struct Scsi_Host *shost)
>   
>   static void scsi_uninit_cmd(struct scsi_cmnd *cmd)
>   {
> -	if (!blk_rq_is_passthrough(cmd->request)) {
> +	if (!blk_rq_is_passthrough(scsi_cmd_to_rq(cmd))) {
>   		struct scsi_driver *drv = scsi_cmd_to_driver(cmd);
>   
>   		if (drv->uninit_command)
> @@ -626,7 +628,7 @@ static void scsi_io_completion_reprep(struct scsi_cmnd *cmd,
>   
>   static bool scsi_cmd_runtime_exceeced(struct scsi_cmnd *cmd)
>   {
> -	struct request *req = cmd->request;
> +	struct request *req = scsi_cmd_to_rq(cmd);
>   	unsigned long wait_for;
>   
>   	if (cmd->allowed == SCSI_CMD_RETRIES_NO_LIMIT)
> @@ -645,7 +647,7 @@ static bool scsi_cmd_runtime_exceeced(struct scsi_cmnd *cmd)
>   static void scsi_io_completion_action(struct scsi_cmnd *cmd, int result)
>   {
>   	struct request_queue *q = cmd->device->request_queue;
> -	struct request *req = cmd->request;
> +	struct request *req = scsi_cmd_to_rq(cmd);
>   	int level = 0;
>   	enum {ACTION_FAIL, ACTION_REPREP, ACTION_RETRY,
>   	      ACTION_DELAYED_RETRY} action;
> @@ -819,7 +821,7 @@ static int scsi_io_completion_nz_result(struct scsi_cmnd *cmd, int result,
>   {
>   	bool sense_valid;
>   	bool sense_current = true;	/* false implies "deferred sense" */
> -	struct request *req = cmd->request;
> +	struct request *req = scsi_cmd_to_rq(cmd);
>   	struct scsi_sense_hdr sshdr;
>   
>   	sense_valid = scsi_command_normalize_sense(cmd, &sshdr);
> @@ -908,7 +910,7 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
>   {
>   	int result = cmd->result;
>   	struct request_queue *q = cmd->device->request_queue;
> -	struct request *req = cmd->request;
> +	struct request *req = scsi_cmd_to_rq(cmd);
>   	blk_status_t blk_stat = BLK_STS_OK;
>   
>   	if (unlikely(result))	/* a nz result may or may not be an error */
> @@ -979,7 +981,7 @@ static inline bool scsi_cmd_needs_dma_drain(struct scsi_device *sdev,
>   blk_status_t scsi_alloc_sgtables(struct scsi_cmnd *cmd)
>   {
>   	struct scsi_device *sdev = cmd->device;
> -	struct request *rq = cmd->request;
> +	struct request *rq = scsi_cmd_to_rq(cmd);
>   	unsigned short nr_segs = blk_rq_nr_phys_segments(rq);
>   	struct scatterlist *last_sg = NULL;
>   	blk_status_t ret;
> @@ -1108,7 +1110,7 @@ void scsi_init_command(struct scsi_device *dev, struct scsi_cmnd *cmd)
>   {
>   	void *buf = cmd->sense_buffer;
>   	void *prot = cmd->prot_sdb;
> -	struct request *rq = blk_mq_rq_from_pdu(cmd);
> +	struct request *rq = scsi_cmd_to_rq(cmd);
>   	unsigned int flags = cmd->flags & SCMD_PRESERVED_FLAGS;
>   	unsigned long jiffies_at_alloc;
>   	int retries, to_clear;
> @@ -1573,12 +1575,12 @@ static blk_status_t scsi_prepare_cmd(struct request *req)
>   
>   static void scsi_mq_done(struct scsi_cmnd *cmd)
>   {
> -	if (unlikely(blk_should_fake_timeout(cmd->request->q)))
> +	if (unlikely(blk_should_fake_timeout(scsi_cmd_to_rq(cmd)->q)))
>   		return;
>   	if (unlikely(test_and_set_bit(SCMD_STATE_COMPLETE, &cmd->state)))
>   		return;
>   	trace_scsi_dispatch_cmd_done(cmd);
> -	blk_mq_complete_request(cmd->request);
> +	blk_mq_complete_request(scsi_cmd_to_rq(cmd));
>   }
>   
>   static void scsi_mq_put_budget(struct request_queue *q, int budget_token)
> diff --git a/drivers/scsi/scsi_logging.c b/drivers/scsi/scsi_logging.c
> index 8ea44c6595ef..f0ae55ad0973 100644
> --- a/drivers/scsi/scsi_logging.c
> +++ b/drivers/scsi/scsi_logging.c
> @@ -28,8 +28,9 @@ static void scsi_log_release_buffer(char *bufptr)
>   
>   static inline const char *scmd_name(const struct scsi_cmnd *scmd)
>   {
> -	return scmd->request->rq_disk ?
> -		scmd->request->rq_disk->disk_name : NULL;
> +	struct request *rq = scsi_cmd_to_rq((struct scsi_cmnd *)scmd);
> +
> +	return rq->rq_disk ? rq->rq_disk->disk_name : NULL;
>   }
>   
>   static size_t sdev_format_header(char *logbuf, size_t logbuf_len,
> @@ -91,7 +92,7 @@ void scmd_printk(const char *level, const struct scsi_cmnd *scmd,
>   	if (!logbuf)
>   		return;
>   	off = sdev_format_header(logbuf, logbuf_len, scmd_name(scmd),
> -				 scmd->request->tag);
> +				 scsi_cmd_to_rq((struct scsi_cmnd *)scmd)->tag);
>   	if (off < logbuf_len) {
>   		va_start(args, fmt);
>   		off += vscnprintf(logbuf + off, logbuf_len - off, fmt, args);
> @@ -188,7 +189,7 @@ void scsi_print_command(struct scsi_cmnd *cmd)
>   		return;
>   
>   	off = sdev_format_header(logbuf, logbuf_len,
> -				 scmd_name(cmd), cmd->request->tag);
> +				 scmd_name(cmd), scsi_cmd_to_rq(cmd)->tag);
>   	if (off >= logbuf_len)
>   		goto out_printk;
>   	off += scnprintf(logbuf + off, logbuf_len - off, "CDB: ");
> @@ -210,7 +211,7 @@ void scsi_print_command(struct scsi_cmnd *cmd)
>   
>   			off = sdev_format_header(logbuf, logbuf_len,
>   						 scmd_name(cmd),
> -						 cmd->request->tag);
> +						 scsi_cmd_to_rq(cmd)->tag);
>   			if (!WARN_ON(off > logbuf_len - 58)) {
>   				off += scnprintf(logbuf + off, logbuf_len - off,
>   						 "CDB[%02x]: ", k);
> @@ -373,7 +374,8 @@ EXPORT_SYMBOL(__scsi_print_sense);
>   /* Normalize and print sense buffer in SCSI command */
>   void scsi_print_sense(const struct scsi_cmnd *cmd)
>   {
> -	scsi_log_print_sense(cmd->device, scmd_name(cmd), cmd->request->tag,
> +	scsi_log_print_sense(cmd->device, scmd_name(cmd),
> +			     scsi_cmd_to_rq((struct scsi_cmnd *)cmd)->tag,
>   			     cmd->sense_buffer, SCSI_SENSE_BUFFERSIZE);
>   }
>   EXPORT_SYMBOL(scsi_print_sense);
> @@ -392,8 +394,8 @@ void scsi_print_result(const struct scsi_cmnd *cmd, const char *msg,
>   	if (!logbuf)
>   		return;
>   
> -	off = sdev_format_header(logbuf, logbuf_len,
> -				 scmd_name(cmd), cmd->request->tag);
> +	off = sdev_format_header(logbuf, logbuf_len, scmd_name(cmd),
> +				 scsi_cmd_to_rq((struct scsi_cmnd *)cmd)->tag);
>   
>   	if (off >= logbuf_len)
>   		goto out_printk;
> diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
> index 6787670d0d16..bd7f73f035be 100644
> --- a/include/scsi/scsi_cmnd.h
> +++ b/include/scsi/scsi_cmnd.h
> @@ -164,7 +164,9 @@ static inline void *scsi_cmd_priv(struct scsi_cmnd *cmd)
>   /* make sure not to use it with passthrough commands */
>   static inline struct scsi_driver *scsi_cmd_to_driver(struct scsi_cmnd *cmd)
>   {
> -	return *(struct scsi_driver **)cmd->request->rq_disk->private_data;
> +	struct request *rq = scsi_cmd_to_rq(cmd);
> +
> +	return *(struct scsi_driver **)rq->rq_disk->private_data;
>   }
>   
>   extern void scsi_finish_command(struct scsi_cmnd *cmd);
> @@ -290,7 +292,7 @@ static inline unsigned char scsi_get_prot_type(struct scsi_cmnd *scmd)
>   
>   static inline sector_t scsi_get_lba(struct scsi_cmnd *scmd)
>   {
> -	return blk_rq_pos(scmd->request);
> +	return blk_rq_pos(scsi_cmd_to_rq(scmd));
>   }
>   
>   static inline unsigned int scsi_prot_interval(struct scsi_cmnd *scmd)
> diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
> index ac6ab16abee7..09797a2b779d 100644
> --- a/include/scsi/scsi_device.h
> +++ b/include/scsi/scsi_device.h
> @@ -265,13 +265,15 @@ sdev_prefix_printk(const char *, const struct scsi_device *, const char *,
>   __printf(3, 4) void
>   scmd_printk(const char *, const struct scsi_cmnd *, const char *, ...);
>   
> -#define scmd_dbg(scmd, fmt, a...)					   \
> -	do {								   \
> -		if ((scmd)->request->rq_disk)				   \
> -			sdev_dbg((scmd)->device, "[%s] " fmt,		   \
> -				 (scmd)->request->rq_disk->disk_name, ##a);\
> -		else							   \
> -			sdev_dbg((scmd)->device, fmt, ##a);		   \
> +#define scmd_dbg(scmd, fmt, a...)				\
> +	do {							\
> +		struct request *rq = scsi_cmd_to_rq((scmd));	\

When introducing a new name (e.g. rq) in a macro, shouldn't it be prefixed
with either a single or double underscore? There is a good chance rq maybe
in use in the enclosing scope causing a compiler warning.

> +								\
> +		if (rq->rq_disk)				\
> +			sdev_dbg((scmd)->device, "[%s] " fmt,	\
> +				 rq->rq_disk->disk_name, ##a);	\
> +		else						\
> +			sdev_dbg((scmd)->device, fmt, ##a);	\
>   	} while (0)
>   
>   enum scsi_target_state {
> 

To James's point, using fio (or dd, sg_dd, etc) and scsi_debug as the LLD
in before and after runs might show a performance improvement.

^ permalink raw reply	[flat|nested] 60+ messages in thread

* Re: [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd
  2021-05-18 17:55 ` [PATCH v2 00/50] Remove the request pointer " James Bottomley
@ 2021-05-18 21:21   ` Bart Van Assche
  0 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 21:21 UTC (permalink / raw)
  To: James Bottomley, Martin K . Petersen; +Cc: linux-scsi

On 5/18/21 10:55 AM, James Bottomley wrote:
> On Tue, 2021-05-18 at 10:44 -0700, Bart Van Assche wrote:
>> Hi Martin,
>>
>> This patch series implements the following two changes for all SCSI
>> drivers:
>> - Use blk_mq_rq_from_pdu() instead of the request member of struct
>> scsi_cmnd
>>   since adding an offset to a pointer is faster than pointer
>> indirection.
> 
> Are there any performance results to back up this assertion?  It's
> quite a lot of churn so it would be nice to know it's worth it.

I have not yet run any performance measurements because I expect that it
will be challenging to measure the performance impact of a change like
this one accurately. The performance measurement tool itself (e.g. fio)
might introduce more variation between runs than the performance
improvement of this patch series. Another reason I have not yet run any
performance measurements is because I was assuming that everyone would
be happy with a patch series that makes code faster and that reduces the
size of a key SCSI data structure.

Anyway, I have run 'make drivers/scsi/scsi_lib.lst' with and without
this patch series applied. What I see is that without this patch series
the assembly code for converting a SCSI command pointer into a request
pointer looks like this:

48 8b bb 10 01 00 00    mov    0x110(%rbx),%rdi

With this patch series applied that conversion code changes into the
following:

48 8d bb f0 fe ff ff    lea    -0x110(%rbx),%rdi

The above shows that struct request has a size of 0x110 = 272 bytes with
my kernel configuration.

This illustrates that this patch series realizes an improvement since
"mov" instructions used for converting SCSI command pointers into struct
request pointers are converted into "lea" instructions. "mov" fetches
data from memory while "lea" does not.

Bart.

^ permalink raw reply	[flat|nested] 60+ messages in thread

* Re: [PATCH v2 02/50] core: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 20:01   ` Douglas Gilbert
@ 2021-05-18 21:59     ` Bart Van Assche
  0 siblings, 0 replies; 60+ messages in thread
From: Bart Van Assche @ 2021-05-18 21:59 UTC (permalink / raw)
  To: dgilbert, Martin K . Petersen
  Cc: linux-scsi, Christoph Hellwig, Hannes Reinecke, Ming Lei,
	James E.J. Bottomley

On 5/18/21 1:01 PM, Douglas Gilbert wrote:
> On 2021-05-18 1:44 p.m., Bart Van Assche wrote:
>> diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
>> index ac6ab16abee7..09797a2b779d 100644
>> --- a/include/scsi/scsi_device.h
>> +++ b/include/scsi/scsi_device.h
>> @@ -265,13 +265,15 @@ sdev_prefix_printk(const char *, const struct
>> scsi_device *, const char *,
>>   __printf(3, 4) void
>>   scmd_printk(const char *, const struct scsi_cmnd *, const char *, ...);
>>   -#define scmd_dbg(scmd, fmt, a...)                       \
>> -    do {                                   \
>> -        if ((scmd)->request->rq_disk)                   \
>> -            sdev_dbg((scmd)->device, "[%s] " fmt,           \
>> -                 (scmd)->request->rq_disk->disk_name, ##a);\
>> -        else                               \
>> -            sdev_dbg((scmd)->device, fmt, ##a);           \
>> +#define scmd_dbg(scmd, fmt, a...)                \
>> +    do {                            \
>> +        struct request *rq = scsi_cmd_to_rq((scmd));    \
> 
> When introducing a new name (e.g. rq) in a macro, shouldn't it be prefixed
> with either a single or double underscore? There is a good chance rq maybe
> in use in the enclosing scope causing a compiler warning.

Hi Doug,

Thanks for having taken a look. I will insert one or more underscores in
front of the 'rq' variable name or remove that variable again. It is not
clear to me whether there is a general rule. In include/linux/kernel.h I
found a variable that has a prefix of seven underscores:

#define trace_printk(fmt, ...)                          \
do {                                                    \
        char _______STR[] = __stringify((__VA_ARGS__)); \
        if (sizeof(_______STR) > 3)                     \
                do_trace_printk(fmt, ##__VA_ARGS__);    \
        else                                            \
                trace_puts(fmt);                        \
} while (0)

Bart.

^ permalink raw reply	[flat|nested] 60+ messages in thread

* Re: [PATCH v2 27/50] megaraid: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 ` [PATCH v2 27/50] megaraid: " Bart Van Assche
@ 2021-05-19  7:43   ` Sumit Saxena
  0 siblings, 0 replies; 60+ messages in thread
From: Sumit Saxena @ 2021-05-19  7:43 UTC (permalink / raw)
  To: Bart Van Assche
  Cc: Martin K . Petersen, Linux SCSI List, Kashyap Desai,
	Shivasharan S, James E.J. Bottomley

[-- Attachment #1: Type: text/plain, Size: 4101 bytes --]

On Tue, May 18, 2021 at 11:15 PM Bart Van Assche <bvanassche@acm.org> wrote:
>
> Prepare for removal of the request pointer by using scsi_cmd_to_rq()
> instead. This patch does not change any functionality.
>
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>

Acked-by: Sumit Saxena <sumit.saxena@broadcom.com>

> ---
>  drivers/scsi/megaraid/megaraid_sas_base.c   |  4 ++--
>  drivers/scsi/megaraid/megaraid_sas_fusion.c | 10 +++++-----
>  2 files changed, 7 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
> index 8ed347eebf07..8fc7a3074a21 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_base.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_base.c
> @@ -1443,10 +1443,10 @@ megasas_build_dcdb(struct megasas_instance *instance, struct scsi_cmnd *scp,
>          * pthru timeout to the os layer timeout value.
>          */
>         if (scp->device->type == TYPE_TAPE) {
> -               if ((scp->request->timeout / HZ) > 0xFFFF)
> +               if (scsi_cmd_to_rq(scp)->timeout / HZ > 0xFFFF)
>                         pthru->timeout = cpu_to_le16(0xFFFF);
>                 else
> -                       pthru->timeout = cpu_to_le16(scp->request->timeout / HZ);
> +                       pthru->timeout = cpu_to_le16(scsi_cmd_to_rq(scp)->timeout / HZ);
>         }
>
>         /*
> diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
> index 2221175ae051..b894451a3e09 100644
> --- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
> +++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
> @@ -402,7 +402,7 @@ megasas_get_msix_index(struct megasas_instance *instance,
>                         (mega_mod64(atomic64_add_return(1, &instance->total_io_count),
>                                 instance->msix_vectors));
>         } else if (instance->host->nr_hw_queues > 1) {
> -               u32 tag = blk_mq_unique_tag(scmd->request);
> +               u32 tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmd));
>
>                 cmd->request_desc->SCSIIO.MSIxIndex = blk_mq_unique_tag_to_hwq(tag) +
>                         instance->low_latency_index_start;
> @@ -3024,7 +3024,7 @@ static void megasas_build_ld_nonrw_fusion(struct megasas_instance *instance,
>                 io_request->DevHandle = cpu_to_le16(device_id);
>                 io_request->LUN[1] = scmd->device->lun;
>                 pRAID_Context->timeout_value =
> -                       cpu_to_le16 (scmd->request->timeout / HZ);
> +                       cpu_to_le16(scsi_cmd_to_rq(scmd)->timeout / HZ);
>                 cmd->request_desc->SCSIIO.RequestFlags =
>                         (MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO <<
>                         MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT);
> @@ -3087,7 +3087,7 @@ megasas_build_syspd_fusion(struct megasas_instance *instance,
>
>         device_id = MEGASAS_DEV_INDEX(scmd);
>         pd_index = MEGASAS_PD_INDEX(scmd);
> -       os_timeout_value = scmd->request->timeout / HZ;
> +       os_timeout_value = scsi_cmd_to_rq(scmd)->timeout / HZ;
>         mr_device_priv_data = scmd->device->hostdata;
>         cmd->pd_interface = mr_device_priv_data->interface_type;
>
> @@ -3376,7 +3376,7 @@ megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance,
>                 return SCSI_MLQUEUE_HOST_BUSY;
>         }
>
> -       cmd = megasas_get_cmd_fusion(instance, scmd->request->tag);
> +       cmd = megasas_get_cmd_fusion(instance, scsi_cmd_to_rq(scmd)->tag);
>
>         if (!cmd) {
>                 atomic_dec(&instance->fw_outstanding);
> @@ -3417,7 +3417,7 @@ megasas_build_and_issue_cmd_fusion(struct megasas_instance *instance,
>          */
>         if (cmd->r1_alt_dev_handle != MR_DEVHANDLE_INVALID) {
>                 r1_cmd = megasas_get_cmd_fusion(instance,
> -                               (scmd->request->tag + instance->max_fw_cmds));
> +                               scsi_cmd_to_rq(scmd)->tag + instance->max_fw_cmds);
>                 megasas_prepare_secondRaid1_IO(instance, cmd, r1_cmd);
>         }
>

[-- Attachment #2: S/MIME Cryptographic Signature --]
[-- Type: application/pkcs7-signature, Size: 4209 bytes --]

^ permalink raw reply	[flat|nested] 60+ messages in thread

* Re: [PATCH v2 47/50] xen-scsifront: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 ` [PATCH v2 47/50] xen-scsifront: " Bart Van Assche
@ 2021-05-19  9:20   ` Juergen Gross
  0 siblings, 0 replies; 60+ messages in thread
From: Juergen Gross @ 2021-05-19  9:20 UTC (permalink / raw)
  To: Bart Van Assche, Martin K . Petersen
  Cc: linux-scsi, Boris Ostrovsky, James E.J. Bottomley


[-- Attachment #1.1.1: Type: text/plain, Size: 290 bytes --]

On 18.05.21 19:44, Bart Van Assche wrote:
> Prepare for removal of the request pointer by using scsi_cmd_to_rq()
> instead. This patch does not change any functionality.
> 
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>

Acked-by: Juergen Gross <jgross@suse.com>


Juergen

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3135 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

^ permalink raw reply	[flat|nested] 60+ messages in thread

* Re: [PATCH v2 25/50] libsas: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 ` [PATCH v2 25/50] libsas: " Bart Van Assche
@ 2021-05-19 10:12   ` John Garry
  0 siblings, 0 replies; 60+ messages in thread
From: John Garry @ 2021-05-19 10:12 UTC (permalink / raw)
  To: Bart Van Assche, Martin K . Petersen
  Cc: linux-scsi, James E.J. Bottomley, Jason Yan, Luo Jiaxing,
	Gustavo A. R. Silva, Jolly Shah, Liu Shixin

On 18/05/2021 18:44, Bart Van Assche wrote:
> Prepare for removal of the request pointer by using scsi_cmd_to_rq()
> instead. This patch does not change any functionality.
> 
> Signed-off-by: Bart Van Assche<bvanassche@acm.org>

Tested-by: John Garry <john.garry@huawei.com>
Reviewed-by: John Garry <john.garry@huawei.com>

^ permalink raw reply	[flat|nested] 60+ messages in thread

* Re: [PATCH v2 48/50] tcm_loop: Use scsi_cmd_to_rq() instead of scsi_cmnd.request
  2021-05-18 17:44 ` [PATCH v2 48/50] tcm_loop: " Bart Van Assche
@ 2021-05-19 18:14   ` Bodo Stroesser
  0 siblings, 0 replies; 60+ messages in thread
From: Bodo Stroesser @ 2021-05-19 18:14 UTC (permalink / raw)
  To: Bart Van Assche, Martin K . Petersen
  Cc: linux-scsi, Mike Christie, Himanshu Madhani

On 18.05.21 19:44, Bart Van Assche wrote:
> Prepare for removal of the request pointer by using scsi_cmd_to_rq()
> instead. This patch does not change any functionality.
> 
> Signed-off-by: Bart Van Assche <bvanassche@acm.org>
> ---
>   drivers/target/loopback/tcm_loop.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/target/loopback/tcm_loop.c b/drivers/target/loopback/tcm_loop.c
> index 2687fd7d45db..834eceaac9cd 100644
> --- a/drivers/target/loopback/tcm_loop.c
> +++ b/drivers/target/loopback/tcm_loop.c
> @@ -183,7 +183,7 @@ static int tcm_loop_queuecommand(struct Scsi_Host *sh, struct scsi_cmnd *sc)
>   
>   	memset(tl_cmd, 0, sizeof(*tl_cmd));
>   	tl_cmd->sc = sc;
> -	tl_cmd->sc_cmd_tag = sc->request->tag;
> +	tl_cmd->sc_cmd_tag = scsi_cmd_to_rq(sc)->tag;
>   
>   	tcm_loop_target_queue_cmd(tl_cmd);
>   	return 0;
> @@ -249,7 +249,7 @@ static int tcm_loop_abort_task(struct scsi_cmnd *sc)
>   	tl_hba = *(struct tcm_loop_hba **)shost_priv(sc->device->host);
>   	tl_tpg = &tl_hba->tl_hba_tpgs[sc->device->id];
>   	ret = tcm_loop_issue_tmr(tl_tpg, sc->device->lun,
> -				 sc->request->tag, TMR_ABORT_TASK);
> +				 scsi_cmd_to_rq(sc)->tag, TMR_ABORT_TASK);
>   	return (ret == TMR_FUNCTION_COMPLETE) ? SUCCESS : FAILED;
>   }
>   
> 

Looks good.

Reviewed-by: Bodo Stroesser <bostroesser@gmail.com>

^ permalink raw reply	[flat|nested] 60+ messages in thread

end of thread, other threads:[~2021-05-19 18:14 UTC | newest]

Thread overview: 60+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-18 17:44 [PATCH v2 00/50] Remove the request pointer from struct scsi_cmnd Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 01/50] core: Introduce the scsi_cmd_to_rq() function Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 02/50] core: Use scsi_cmd_to_rq() instead of scsi_cmnd.request Bart Van Assche
2021-05-18 20:01   ` Douglas Gilbert
2021-05-18 21:59     ` Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 03/50] sd: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 04/50] sr: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 05/50] scsi_transport_fc: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 06/50] scsi_transport_spi: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 07/50] ata: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 08/50] RDMA/iser: " Bart Van Assche
2021-05-18 17:58   ` Sagi Grimberg
2021-05-18 17:44 ` [PATCH v2 09/50] RDMA/srp: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 10/50] zfcp: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 11/50] 53c700: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 12/50] NCR5380: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 13/50] aacraid: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 14/50] advansys: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 15/50] bnx2i: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 16/50] csiostor: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 17/50] cxlflash: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 18/50] dpt_i2o: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 19/50] fnic: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 20/50] hisi_sas: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 21/50] hpsa: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 22/50] ibmvfc: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 23/50] ibmvscsi: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 24/50] ips: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 25/50] libsas: " Bart Van Assche
2021-05-19 10:12   ` John Garry
2021-05-18 17:44 ` [PATCH v2 26/50] lpfc: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 27/50] megaraid: " Bart Van Assche
2021-05-19  7:43   ` Sumit Saxena
2021-05-18 17:44 ` [PATCH v2 28/50] mpt3sas: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 29/50] mvumi: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 30/50] myrb: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 31/50] myrs: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 32/50] ncr53c8xx: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 33/50] qedf: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 34/50] qedi: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 35/50] qla1280: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 36/50] qla2xxx: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 37/50] qla4xxx: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 38/50] qlogicpti: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 39/50] scsi_debug: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 40/50] smartpqi: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 41/50] snic: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 42/50] stex: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 43/50] sun3_scsi: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 44/50] sym53c8xx: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 45/50] ufs: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 46/50] virtio_scsi: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 47/50] xen-scsifront: " Bart Van Assche
2021-05-19  9:20   ` Juergen Gross
2021-05-18 17:44 ` [PATCH v2 48/50] tcm_loop: " Bart Van Assche
2021-05-19 18:14   ` Bodo Stroesser
2021-05-18 17:44 ` [PATCH v2 49/50] usb-storage: " Bart Van Assche
2021-05-18 17:44 ` [PATCH v2 50/50] core: Remove the request member from struct scsi_cmnd Bart Van Assche
2021-05-18 17:55 ` [PATCH v2 00/50] Remove the request pointer " James Bottomley
2021-05-18 21:21   ` Bart Van Assche

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.