Issuing a host reset should not rely on any commands.
So use Scsi_Host as argument for eh_host_reset_handler.

Signed-off-by: Hannes Reinecke <h...@suse.de>
---
 Documentation/scsi/scsi_eh.txt                  |  2 +-
 Documentation/scsi/scsi_mid_low_api.txt         |  4 +--
 arch/ia64/hp/sim/simscsi.c                      |  2 +-
 drivers/infiniband/ulp/srp/ib_srp.c             |  6 ++--
 drivers/message/fusion/mptscsih.c               | 21 +++++++------
 drivers/message/fusion/mptscsih.h               |  2 +-
 drivers/s390/scsi/zfcp_scsi.c                   |  3 +-
 drivers/scsi/3w-9xxx.c                          | 11 +++----
 drivers/scsi/3w-sas.c                           | 11 +++----
 drivers/scsi/3w-xxxx.c                          | 11 ++++---
 drivers/scsi/53c700.c                           | 39 +++++++++++++------------
 drivers/scsi/BusLogic.c                         | 14 +++------
 drivers/scsi/NCR5380.c                          |  5 ++--
 drivers/scsi/NCR53c406a.c                       |  6 ++--
 drivers/scsi/aacraid/linit.c                    |  6 ++--
 drivers/scsi/advansys.c                         | 26 +++++++++--------
 drivers/scsi/aha152x.c                          | 11 +------
 drivers/scsi/aha152x.h                          |  2 +-
 drivers/scsi/aha1542.c                          | 17 +++++------
 drivers/scsi/arm/fas216.c                       |  4 +--
 drivers/scsi/arm/fas216.h                       |  6 ++--
 drivers/scsi/atari_scsi.c                       |  4 +--
 drivers/scsi/cxlflash/main.c                    | 13 ++-------
 drivers/scsi/dpt_i2o.c                          | 14 ++++-----
 drivers/scsi/dpti.h                             |  2 +-
 drivers/scsi/eata.c                             | 10 ++-----
 drivers/scsi/eata_pio.c                         | 29 +++++++++---------
 drivers/scsi/esas2r/esas2r.h                    |  2 +-
 drivers/scsi/esas2r/esas2r_main.c               | 16 +++++-----
 drivers/scsi/esp_scsi.c                         |  4 +--
 drivers/scsi/fdomain.c                          |  2 +-
 drivers/scsi/fdomain.h                          |  2 +-
 drivers/scsi/fnic/fnic.h                        |  2 +-
 drivers/scsi/fnic/fnic_scsi.c                   |  3 +-
 drivers/scsi/hptiop.c                           |  6 ++--
 drivers/scsi/ibmvscsi/ibmvfc.c                  |  4 +--
 drivers/scsi/ibmvscsi/ibmvscsi.c                |  4 +--
 drivers/scsi/imm.c                              |  6 ++--
 drivers/scsi/ipr.c                              |  4 +--
 drivers/scsi/ips.c                              | 23 +++++----------
 drivers/scsi/libfc/fc_fcp.c                     |  5 ++--
 drivers/scsi/lpfc/lpfc_scsi.c                   |  3 +-
 drivers/scsi/mac53c94.c                         |  8 ++---
 drivers/scsi/megaraid.c                         |  4 +--
 drivers/scsi/megaraid.h                         |  2 +-
 drivers/scsi/megaraid/megaraid_mbox.c           | 14 +++------
 drivers/scsi/megaraid/megaraid_sas_base.c       | 28 +++++++-----------
 drivers/scsi/mesh.c                             | 10 +++----
 drivers/scsi/mpt3sas/mpt3sas_scsih.c            | 13 ++++-----
 drivers/scsi/mvumi.c                            |  7 ++---
 drivers/scsi/nsp32.c                            | 12 ++++----
 drivers/scsi/pcmcia/aha152x_stub.c              |  2 +-
 drivers/scsi/pcmcia/nsp_cs.c                    |  4 +--
 drivers/scsi/pcmcia/qlogic_stub.c               |  4 +--
 drivers/scsi/pcmcia/sym53c500_cs.c              |  8 ++---
 drivers/scsi/pmcraid.c                          |  6 ++--
 drivers/scsi/ppa.c                              |  6 ++--
 drivers/scsi/qedf/qedf_main.c                   |  4 +--
 drivers/scsi/qedi/qedi_iscsi.c                  |  3 +-
 drivers/scsi/qla1280.c                          |  3 +-
 drivers/scsi/qla2xxx/qla_os.c                   | 20 +++++--------
 drivers/scsi/qla4xxx/ql4_os.c                   | 18 +++++-------
 drivers/scsi/qlogicfas408.c                     | 10 +++----
 drivers/scsi/qlogicfas408.h                     |  2 +-
 drivers/scsi/scsi_debug.c                       | 16 +++++-----
 drivers/scsi/scsi_error.c                       |  2 +-
 drivers/scsi/snic/snic.h                        |  3 +-
 drivers/scsi/snic/snic_scsi.c                   | 29 +++++-------------
 drivers/scsi/stex.c                             |  7 ++---
 drivers/scsi/storvsc_drv.c                      |  4 +--
 drivers/scsi/sym53c416.c                        | 16 ++++------
 drivers/scsi/sym53c8xx_2/sym_glue.c             |  3 +-
 drivers/scsi/ufs/ufshcd.c                       |  8 ++---
 drivers/scsi/vmw_pvscsi.c                       |  5 ++--
 drivers/scsi/wd33c93.c                          |  4 +--
 drivers/scsi/wd33c93.h                          |  2 +-
 drivers/scsi/wd719x.c                           |  4 +--
 drivers/staging/unisys/visorhba/visorhba_main.c |  4 +--
 drivers/usb/image/microtek.c                    |  4 +--
 include/scsi/libfc.h                            |  2 +-
 include/scsi/scsi_host.h                        |  2 +-
 81 files changed, 290 insertions(+), 380 deletions(-)

diff --git a/Documentation/scsi/scsi_eh.txt b/Documentation/scsi/scsi_eh.txt
index 11e447b..78cd6b9 100644
--- a/Documentation/scsi/scsi_eh.txt
+++ b/Documentation/scsi/scsi_eh.txt
@@ -208,7 +208,7 @@ considered to fail always.
 int (* eh_abort_handler)(struct scsi_cmnd *);
 int (* eh_device_reset_handler)(struct scsi_cmnd *);
 int (* eh_bus_reset_handler)(struct scsi_cmnd *);
-int (* eh_host_reset_handler)(struct scsi_cmnd *);
+int (* eh_host_reset_handler)(struct Scsi_Host *);
 
  Higher-severity actions are taken only when lower-severity actions
 cannot recover some of failed scmds.  Also, note that failure of the
diff --git a/Documentation/scsi/scsi_mid_low_api.txt 
b/Documentation/scsi/scsi_mid_low_api.txt
index 6338400..ad517d5 100644
--- a/Documentation/scsi/scsi_mid_low_api.txt
+++ b/Documentation/scsi/scsi_mid_low_api.txt
@@ -891,7 +891,7 @@ Details:
 
 /**
  *      eh_host_reset_handler - reset host (host bus adapter)
- *      @scp: SCSI host that contains this device should be reset
+ *      @shost: SCSI host that should be reset
  *
  *      Returns SUCCESS if command aborted else FAILED
  *
@@ -908,7 +908,7 @@ Details:
  *
  *      Optionally defined in: LLD
  **/
-     int eh_host_reset_handler(struct scsi_cmnd * scp)
+     int eh_host_reset_handler(struct Scsi_Host * shost)
 
 
 /**
diff --git a/arch/ia64/hp/sim/simscsi.c b/arch/ia64/hp/sim/simscsi.c
index 085047f..1bff66b 100644
--- a/arch/ia64/hp/sim/simscsi.c
+++ b/arch/ia64/hp/sim/simscsi.c
@@ -329,7 +329,7 @@ struct disk_stat {
 static DEF_SCSI_QCMD(simscsi_queuecommand)
 
 static int
-simscsi_host_reset (struct scsi_cmnd *sc)
+simscsi_host_reset (struct Scsi_Host *shost)
 {
        printk(KERN_ERR "simscsi_host_reset: not implemented\n");
        return 0;
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c 
b/drivers/infiniband/ulp/srp/ib_srp.c
index 2354c74..588fc08 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -2679,11 +2679,11 @@ static int srp_reset_device(struct scsi_cmnd *scmnd)
        return SUCCESS;
 }
 
-static int srp_reset_host(struct scsi_cmnd *scmnd)
+static int srp_reset_host(struct Scsi_Host *shost)
 {
-       struct srp_target_port *target = host_to_target(scmnd->device->host);
+       struct srp_target_port *target = host_to_target(shost);
 
-       shost_printk(KERN_ERR, target->scsi_host, PFX "SRP reset_host 
called\n");
+       shost_printk(KERN_ERR, shost, PFX "SRP reset_host called\n");
 
        return srp_reconnect_rport(target->rport) == 0 ? SUCCESS : FAILED;
 }
diff --git a/drivers/message/fusion/mptscsih.c 
b/drivers/message/fusion/mptscsih.c
index 6ba07c7..0719d6d 100644
--- a/drivers/message/fusion/mptscsih.c
+++ b/drivers/message/fusion/mptscsih.c
@@ -1902,15 +1902,15 @@ int mptscsih_show_info(struct seq_file *m, struct 
Scsi_Host *host)
 
 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
 /**
- *     mptscsih_host_reset - Perform a SCSI host adapter RESET (new_eh variant)
- *     @SCpnt: Pointer to scsi_cmnd structure, IO which reset is due to
+ *     mptscsih_host_reset - Perform a SCSI host adapter RESET
+ *     @sh: Pointer to Scsi_Host structure, which is reset due to
  *
  *     (linux scsi_host_template.eh_host_reset_handler routine)
  *
  *     Returns SUCCESS or FAILED.
  */
 int
-mptscsih_host_reset(struct scsi_cmnd *SCpnt)
+mptscsih_host_reset(struct Scsi_Host *sh)
 {
        MPT_SCSI_HOST *  hd;
        int              status = SUCCESS;
@@ -1918,9 +1918,8 @@ int mptscsih_show_info(struct seq_file *m, struct 
Scsi_Host *host)
        int             retval;
 
        /*  If we can't locate the host to reset, then we failed. */
-       if ((hd = shost_priv(SCpnt->device->host)) == NULL){
-               printk(KERN_ERR MYNAM ": host reset: "
-                   "Can't locate host! (sc=%p)\n", SCpnt);
+       if ((hd = shost_priv(sh)) == NULL){
+               printk(KERN_ERR MYNAM ": host reset: Can't locate host!\n");
                return FAILED;
        }
 
@@ -1928,20 +1927,20 @@ int mptscsih_show_info(struct seq_file *m, struct 
Scsi_Host *host)
        mptscsih_flush_running_cmds(hd);
 
        ioc = hd->ioc;
-       printk(MYIOC_s_INFO_FMT "attempting host reset! (sc=%p)\n",
-           ioc->name, SCpnt);
+       printk(MYIOC_s_INFO_FMT "attempting host reset!\n",
+           ioc->name);
 
        /*  If our attempts to reset the host failed, then return a failed
         *  status.  The host will be taken off line by the SCSI mid-layer.
         */
-    retval = mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP);
+       retval = mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP);
        if (retval < 0)
                status = FAILED;
        else
                status = SUCCESS;
 
-       printk(MYIOC_s_INFO_FMT "host reset: %s (sc=%p)\n",
-           ioc->name, ((retval == 0) ? "SUCCESS" : "FAILED" ), SCpnt);
+       printk(MYIOC_s_INFO_FMT "host reset: %s\n",
+           ioc->name, ((retval == 0) ? "SUCCESS" : "FAILED" ));
 
        return status;
 }
diff --git a/drivers/message/fusion/mptscsih.h 
b/drivers/message/fusion/mptscsih.h
index 2baeefd..6ab8254 100644
--- a/drivers/message/fusion/mptscsih.h
+++ b/drivers/message/fusion/mptscsih.h
@@ -121,7 +121,7 @@ extern int mptscsih_IssueTaskMgmt(MPT_SCSI_HOST *hd, u8 
type, u8 channel,
 extern int mptscsih_abort(struct scsi_cmnd * SCpnt);
 extern int mptscsih_dev_reset(struct scsi_cmnd * SCpnt);
 extern int mptscsih_bus_reset(struct scsi_cmnd * SCpnt);
-extern int mptscsih_host_reset(struct scsi_cmnd *SCpnt);
+extern int mptscsih_host_reset(struct Scsi_Host *sh);
 extern int mptscsih_bios_param(struct scsi_device * sdev, struct block_device 
*bdev, sector_t capacity, int geom[]);
 extern int mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR 
*r);
 extern int mptscsih_taskmgmt_complete(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, 
MPT_FRAME_HDR *r);
diff --git a/drivers/s390/scsi/zfcp_scsi.c b/drivers/s390/scsi/zfcp_scsi.c
index 3d18659..d7d4a63 100644
--- a/drivers/s390/scsi/zfcp_scsi.c
+++ b/drivers/s390/scsi/zfcp_scsi.c
@@ -309,9 +309,8 @@ static int zfcp_scsi_eh_target_reset_handler(struct 
scsi_cmnd *scpnt)
        return zfcp_task_mgmt_function(scpnt, FCP_TMF_TGT_RESET);
 }
 
-static int zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt)
+static int zfcp_scsi_eh_host_reset_handler(struct Scsi_Host *host)
 {
-       struct Scsi_Host *host = scpnt->device->host;
        struct zfcp_adapter *adapter = (struct zfcp_adapter *)host->hostdata[0];
        int ret = 0;
        unsigned long flags;
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
index 00e7968..463e053 100644
--- a/drivers/scsi/3w-9xxx.c
+++ b/drivers/scsi/3w-9xxx.c
@@ -1715,18 +1715,19 @@ static int twa_scsi_biosparam(struct scsi_device *sdev, 
struct block_device *bde
 } /* End twa_scsi_biosparam() */
 
 /* This is the new scsi eh reset function */
-static int twa_scsi_eh_reset(struct scsi_cmnd *SCpnt)
+static int twa_scsi_eh_reset(struct Scsi_Host *shost)
 {
        TW_Device_Extension *tw_dev = NULL;
        int retval = FAILED;
 
-       tw_dev = (TW_Device_Extension *)SCpnt->device->host->hostdata;
+       tw_dev = (TW_Device_Extension *)shost->hostdata;
 
        tw_dev->num_resets++;
 
-       sdev_printk(KERN_WARNING, SCpnt->device,
-               "WARNING: (0x%02X:0x%04X): Command (0x%x) timed out, resetting 
card.\n",
-               TW_DRIVER, 0x2c, SCpnt->cmnd[0]);
+       shost_printk(KERN_WARNING, shost,
+                    "WARNING: (0x%02X:0x%04X): "
+                    "Command timed out, resetting card.\n",
+                    TW_DRIVER, 0x2c);
 
        /* Make sure we are not issuing an ioctl or resetting from ioctl */
        mutex_lock(&tw_dev->ioctl_lock);
diff --git a/drivers/scsi/3w-sas.c b/drivers/scsi/3w-sas.c
index b150e13..5edaa0f2 100644
--- a/drivers/scsi/3w-sas.c
+++ b/drivers/scsi/3w-sas.c
@@ -1428,18 +1428,19 @@ static int twl_scsi_biosparam(struct scsi_device *sdev, 
struct block_device *bde
 } /* End twl_scsi_biosparam() */
 
 /* This is the new scsi eh reset function */
-static int twl_scsi_eh_reset(struct scsi_cmnd *SCpnt)
+static int twl_scsi_eh_reset(struct Scsi_Host *shost)
 {
        TW_Device_Extension *tw_dev = NULL;
        int retval = FAILED;
 
-       tw_dev = (TW_Device_Extension *)SCpnt->device->host->hostdata;
+       tw_dev = (TW_Device_Extension *)shost->hostdata;
 
        tw_dev->num_resets++;
 
-       sdev_printk(KERN_WARNING, SCpnt->device,
-               "WARNING: (0x%02X:0x%04X): Command (0x%x) timed out, resetting 
card.\n",
-               TW_DRIVER, 0x2c, SCpnt->cmnd[0]);
+       shost_printk(KERN_WARNING, shost,
+                    "WARNING: (0x%02X:0x%04X): "
+                    "Command timed out, resetting card.\n",
+                    TW_DRIVER, 0x2c);
 
        /* Make sure we are not issuing an ioctl or resetting from ioctl */
        mutex_lock(&tw_dev->ioctl_lock);
diff --git a/drivers/scsi/3w-xxxx.c b/drivers/scsi/3w-xxxx.c
index 33261b6..f999e06 100644
--- a/drivers/scsi/3w-xxxx.c
+++ b/drivers/scsi/3w-xxxx.c
@@ -1357,25 +1357,24 @@ static int tw_scsi_biosparam(struct scsi_device *sdev, 
struct block_device *bdev
 } /* End tw_scsi_biosparam() */
 
 /* This is the new scsi eh reset function */
-static int tw_scsi_eh_reset(struct scsi_cmnd *SCpnt) 
+static int tw_scsi_eh_reset(struct Scsi_Host *shost)
 {
        TW_Device_Extension *tw_dev=NULL;
        int retval = FAILED;
 
-       tw_dev = (TW_Device_Extension *)SCpnt->device->host->hostdata;
+       tw_dev = (TW_Device_Extension *)shost->hostdata;
 
        tw_dev->num_resets++;
 
-       sdev_printk(KERN_WARNING, SCpnt->device,
-               "WARNING: Command (0x%x) timed out, resetting card.\n",
-               SCpnt->cmnd[0]);
+       shost_printk(KERN_WARNING, shost,
+               "WARNING: Command timed out, resetting card.\n");
 
        /* Make sure we are not issuing an ioctl or resetting from ioctl */
        mutex_lock(&tw_dev->ioctl_lock);
 
        /* Now reset the card and some of the device extension data */
        if (tw_reset_device_extension(tw_dev)) {
-               printk(KERN_WARNING "3w-xxxx: scsi%d: Reset failed.\n", 
tw_dev->host->host_no);
+               shost_printk(KERN_WARNING, shost, "Reset failed.\n");
                goto out;
        }
 
diff --git a/drivers/scsi/53c700.c b/drivers/scsi/53c700.c
index 2b8cc32..9635d00 100644
--- a/drivers/scsi/53c700.c
+++ b/drivers/scsi/53c700.c
@@ -168,7 +168,7 @@
 
 STATIC int NCR_700_queuecommand(struct Scsi_Host *h, struct scsi_cmnd *);
 STATIC int NCR_700_abort(struct scsi_cmnd * SCpnt);
-STATIC int NCR_700_host_reset(struct scsi_cmnd * SCpnt);
+STATIC int NCR_700_host_reset(struct Scsi_Host *host);
 STATIC void NCR_700_chip_setup(struct Scsi_Host *host);
 STATIC void NCR_700_chip_reset(struct Scsi_Host *host);
 STATIC int NCR_700_slave_alloc(struct scsi_device *SDpnt);
@@ -1937,40 +1937,41 @@ STATIC DEF_SCSI_QCMD(NCR_700_queuecommand)
 }
 
 STATIC int
-NCR_700_host_reset(struct scsi_cmnd * SCp)
+NCR_700_host_reset(struct Scsi_Host * host)
 {
        DECLARE_COMPLETION_ONSTACK(complete);
-       struct NCR_700_Host_Parameters *hostdata = 
-               (struct NCR_700_Host_Parameters 
*)SCp->device->host->hostdata[0];
+       struct NCR_700_Host_Parameters *hostdata =
+               (struct NCR_700_Host_Parameters *)host->hostdata[0];
 
-       scmd_printk(KERN_INFO, SCp,
-               "New error handler wants HOST reset, cmd %p\n\t", SCp);
-       scsi_print_command(SCp);
+       shost_printk(KERN_INFO, host,
+               "New error handler wants HOST reset\n");
 
        /* In theory, eh_complete should always be null because the
         * eh is single threaded, but just in case we're handling a
         * reset via sg or something */
-       spin_lock_irq(SCp->device->host->host_lock);
+       spin_lock_irq(host->host_lock);
        while (hostdata->eh_complete != NULL) {
-               spin_unlock_irq(SCp->device->host->host_lock);
+               spin_unlock_irq(host->host_lock);
                msleep_interruptible(100);
-               spin_lock_irq(SCp->device->host->host_lock);
+               spin_lock_irq(host->host_lock);
        }
 
        hostdata->eh_complete = &complete;
-       NCR_700_internal_bus_reset(SCp->device->host);
-       NCR_700_chip_reset(SCp->device->host);
+       NCR_700_internal_bus_reset(host);
+       NCR_700_chip_reset(host);
 
-       spin_unlock_irq(SCp->device->host->host_lock);
+       spin_unlock_irq(host->host_lock);
        wait_for_completion(&complete);
-       spin_lock_irq(SCp->device->host->host_lock);
+       spin_lock_irq(host->host_lock);
 
        hostdata->eh_complete = NULL;
-       /* Revalidate the transport parameters of the failing device */
-       if(hostdata->fast)
-               spi_schedule_dv_device(SCp->device);
-
-       spin_unlock_irq(SCp->device->host->host_lock);
+       /* Revalidate the transport parameters for attached devices */
+       if(hostdata->fast) {
+               struct scsi_device *sdev;
+               __shost_for_each_device(sdev, host)
+                       spi_schedule_dv_device(sdev);
+       }
+       spin_unlock_irq(host->host_lock);
        return SUCCESS;
 }
 
diff --git a/drivers/scsi/BusLogic.c b/drivers/scsi/BusLogic.c
index 35380a5..44b0ec0 100644
--- a/drivers/scsi/BusLogic.c
+++ b/drivers/scsi/BusLogic.c
@@ -2998,21 +2998,15 @@ static bool blogic_write_outbox(struct blogic_adapter 
*adapter,
 
 /* Error Handling (EH) support */
 
-static int blogic_hostreset(struct scsi_cmnd *SCpnt)
+static int blogic_hostreset(struct Scsi_Host *shost)
 {
        struct blogic_adapter *adapter =
-               (struct blogic_adapter *) SCpnt->device->host->hostdata;
-
-       unsigned int id = SCpnt->device->id;
-       struct blogic_tgt_stats *stats = &adapter->tgt_stats[id];
+               (struct blogic_adapter *) shost->hostdata;
        int rc;
 
-       spin_lock_irq(SCpnt->device->host->host_lock);
-
-       blogic_inc_count(&stats->adapter_reset_req);
-
+       spin_lock_irq(shost->host_lock);
        rc = blogic_resetadapter(adapter, false);
-       spin_unlock_irq(SCpnt->device->host->host_lock);
+       spin_unlock_irq(shost->host_lock);
        return rc;
 }
 
diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c
index 429cb00..b77ce28 100644
--- a/drivers/scsi/NCR5380.c
+++ b/drivers/scsi/NCR5380.c
@@ -2297,14 +2297,13 @@ static int NCR5380_abort(struct scsi_cmnd *cmd)
 
 /**
  * NCR5380_host_reset - reset the SCSI host
- * @cmd: SCSI command undergoing EH
+ * @instance: SCSI host undergoing EH
  *
  * Returns SUCCESS
  */
 
-static int NCR5380_host_reset(struct scsi_cmnd *cmd)
+static int NCR5380_host_reset(struct Scsi_Host *instance)
 {
-       struct Scsi_Host *instance = cmd->device->host;
        struct NCR5380_hostdata *hostdata = shost_priv(instance);
        int i;
        unsigned long flags;
diff --git a/drivers/scsi/NCR53c406a.c b/drivers/scsi/NCR53c406a.c
index 6e110c6..002177e 100644
--- a/drivers/scsi/NCR53c406a.c
+++ b/drivers/scsi/NCR53c406a.c
@@ -728,11 +728,11 @@ static int NCR53c406a_queue_lck(Scsi_Cmnd * SCpnt, void 
(*done) (Scsi_Cmnd *))
 
 static DEF_SCSI_QCMD(NCR53c406a_queue)
 
-static int NCR53c406a_host_reset(Scsi_Cmnd * SCpnt)
+static int NCR53c406a_host_reset(struct Scsi_Host * shost)
 {
        DEB(printk("NCR53c406a_reset called\n"));
 
-       spin_lock_irq(SCpnt->device->host->host_lock);
+       spin_lock_irq(shost->host_lock);
 
        outb(C4_IMG, CONFIG4);  /* Select reg set 0 */
        outb(CHIP_RESET, CMD_REG);
@@ -742,7 +742,7 @@ static int NCR53c406a_host_reset(Scsi_Cmnd * SCpnt)
 
        rtrc(2);
 
-       spin_unlock_irq(SCpnt->device->host->host_lock);
+       spin_unlock_irq(shost->host_lock);
 
        return SUCCESS;
 }
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index c26130e..bef2c0d 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -1051,13 +1051,11 @@ static int aac_eh_bus_reset(struct scsi_cmnd* cmd)
 
 /*
  *     aac_eh_host_reset       - Host reset command handling
- *     @scsi_cmd:      SCSI command block causing the reset
+ *     @host:  SCSI host to be reset
  *
  */
-int aac_eh_host_reset(struct scsi_cmnd *cmd)
+int aac_eh_host_reset(struct Scsi_Host *host)
 {
-       struct scsi_device * dev = cmd->device;
-       struct Scsi_Host * host = dev->host;
        struct aac_dev * aac = (struct aac_dev *)host->hostdata;
        int ret = FAILED;
        __le32 supported_options2 = 0;
diff --git a/drivers/scsi/advansys.c b/drivers/scsi/advansys.c
index 24e57e7..7e7b203 100644
--- a/drivers/scsi/advansys.c
+++ b/drivers/scsi/advansys.c
@@ -7108,9 +7108,8 @@ static int AscISR(ASC_DVC_VAR *asc_dvc)
  * sleeping is allowed and no locking other than for host structures is
  * required. Returns SUCCESS or FAILED.
  */
-static int advansys_reset(struct scsi_cmnd *scp)
+static int advansys_reset(struct Scsi_Host *shost)
 {
-       struct Scsi_Host *shost = scp->device->host;
        struct asc_board *boardp = shost_priv(shost);
        unsigned long flags;
        int status;
@@ -7120,7 +7119,7 @@ static int advansys_reset(struct scsi_cmnd *scp)
 
        ASC_STATS(shost, reset);
 
-       scmd_printk(KERN_INFO, scp, "SCSI host reset started...\n");
+       shost_printk(KERN_INFO, shost, "SCSI host reset started...\n");
 
        if (ASC_NARROW_BOARD(boardp)) {
                ASC_DVC_VAR *asc_dvc = &boardp->dvc_var.asc_dvc_var;
@@ -7131,16 +7130,18 @@ static int advansys_reset(struct scsi_cmnd *scp)
 
                /* Refer to ASC_IERR_* definitions for meaning of 'err_code'. */
                if (asc_dvc->err_code || !asc_dvc->overrun_dma) {
-                       scmd_printk(KERN_INFO, scp, "SCSI host reset error: "
-                                   "0x%x, status: 0x%x\n", asc_dvc->err_code,
+                       shost_printk(KERN_INFO, shost,
+                                    "SCSI host reset error: 0x%x, status: 
0x%x\n",
+                                    asc_dvc->err_code,
                                    status);
                        ret = FAILED;
                } else if (status) {
-                       scmd_printk(KERN_INFO, scp, "SCSI host reset warning: "
-                                   "0x%x\n", status);
+                       shost_printk(KERN_INFO, shost,
+                                    "SCSI host reset warning: 0x%x\n",
+                                    status);
                } else {
-                       scmd_printk(KERN_INFO, scp, "SCSI host reset "
-                                   "successful\n");
+                       shost_printk(KERN_INFO, shost,
+                                    "SCSI host reset successful\n");
                }
 
                ASC_DBG(1, "after AscInitAsc1000Driver()\n");
@@ -7157,12 +7158,13 @@ static int advansys_reset(struct scsi_cmnd *scp)
                ASC_DBG(1, "before AdvResetChipAndSB()\n");
                switch (AdvResetChipAndSB(adv_dvc)) {
                case ASC_TRUE:
-                       scmd_printk(KERN_INFO, scp, "SCSI host reset "
-                                   "successful\n");
+                       shost_printk(KERN_INFO, shost,
+                                    "SCSI host reset successful\n");
                        break;
                case ASC_FALSE:
                default:
-                       scmd_printk(KERN_INFO, scp, "SCSI host reset error\n");
+                       shost_printk(KERN_INFO, shost,
+                                    "SCSI host reset error\n");
                        ret = FAILED;
                        break;
                }
diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c
index 21e9d7c..857884a 100644
--- a/drivers/scsi/aha152x.c
+++ b/drivers/scsi/aha152x.c
@@ -1205,7 +1205,7 @@ static void reset_ports(struct Scsi_Host *shpnt)
  * Reset the host (bus and controller)
  *
  */
-int aha152x_host_reset_host(struct Scsi_Host *shpnt)
+int aha152x_host_reset(struct Scsi_Host *shpnt)
 {
        aha152x_bus_reset_host(shpnt);
        reset_ports(shpnt);
@@ -1214,15 +1214,6 @@ int aha152x_host_reset_host(struct Scsi_Host *shpnt)
 }
 
 /*
- * Reset the host (bus and controller)
- *
- */
-static int aha152x_host_reset(Scsi_Cmnd *SCpnt)
-{
-       return aha152x_host_reset_host(SCpnt->device->host);
-}
-
-/*
  * Return the "logical geometry"
  *
  */
diff --git a/drivers/scsi/aha152x.h b/drivers/scsi/aha152x.h
index ac4bfa438b..3ccf724 100644
--- a/drivers/scsi/aha152x.h
+++ b/drivers/scsi/aha152x.h
@@ -332,6 +332,6 @@ struct aha152x_setup {
 
 struct Scsi_Host *aha152x_probe_one(struct aha152x_setup *);
 void aha152x_release(struct Scsi_Host *);
-int aha152x_host_reset_host(struct Scsi_Host *);
+int aha152x_host_reset(struct Scsi_Host *);
 
 #endif /* _AHA152X_H */
diff --git a/drivers/scsi/aha1542.c b/drivers/scsi/aha1542.c
index a23cc9a..3d4c404 100644
--- a/drivers/scsi/aha1542.c
+++ b/drivers/scsi/aha1542.c
@@ -849,9 +849,8 @@ static int aha1542_dev_reset(struct scsi_cmnd *cmd)
        return SUCCESS;
 }
 
-static int aha1542_reset(struct scsi_cmnd *cmd, u8 reset_cmd)
+static int aha1542_reset(struct Scsi_Host *sh, u8 reset_cmd)
 {
-       struct Scsi_Host *sh = cmd->device->host;
        struct aha1542_hostdata *aha1542 = shost_priv(sh);
        unsigned long flags;
        int i;
@@ -863,9 +862,9 @@ static int aha1542_reset(struct scsi_cmnd *cmd, u8 
reset_cmd)
         * we do this?  Try this first, and we can add that later
         * if it turns out to be useful.
         */
-       outb(reset_cmd, CONTROL(cmd->device->host->io_port));
+       outb(reset_cmd, CONTROL(sh->io_port));
 
-       if (!wait_mask(STATUS(cmd->device->host->io_port),
+       if (!wait_mask(STATUS(sh->io_port),
             STATMASK, IDLE, STST | DIAGF | INVDCMD | DF | CDF, 0)) {
                spin_unlock_irqrestore(sh->host_lock, flags);
                return FAILED;
@@ -876,7 +875,7 @@ static int aha1542_reset(struct scsi_cmnd *cmd, u8 
reset_cmd)
         * us again after host reset.
         */
        if (reset_cmd & HRST)
-               setup_mailboxes(cmd->device->host);
+               setup_mailboxes(sh);
 
        /*
         * Now try to pick up the pieces.  For all pending commands,
@@ -884,7 +883,7 @@ static int aha1542_reset(struct scsi_cmnd *cmd, u8 
reset_cmd)
         * out.  We do not try and restart any commands or anything - 
         * the strategy handler takes care of that crap.
         */
-       shost_printk(KERN_WARNING, cmd->device->host, "Sent BUS RESET to scsi 
host %d\n", cmd->device->host->host_no);
+       shost_printk(KERN_WARNING, sh, "Sent BUS RESET to scsi host %d\n", 
cmd->device->host->host_no);
 
        for (i = 0; i < AHA1542_MAILBOXES; i++) {
                if (aha1542->int_cmds[i] != NULL) {
@@ -913,12 +912,12 @@ static int aha1542_reset(struct scsi_cmnd *cmd, u8 
reset_cmd)
 
 static int aha1542_bus_reset(struct scsi_cmnd *cmd)
 {
-       return aha1542_reset(cmd, SCRST);
+       return aha1542_reset(cmd->device->host, SCRST);
 }
 
-static int aha1542_host_reset(struct scsi_cmnd *cmd)
+static int aha1542_host_reset(struct Scsi_Host *sh)
 {
-       return aha1542_reset(cmd, HRST | SCRST);
+       return aha1542_reset(sh, HRST | SCRST);
 }
 
 static int aha1542_biosparam(struct scsi_device *sdev,
diff --git a/drivers/scsi/arm/fas216.c b/drivers/scsi/arm/fas216.c
index 2438879..e4a08e8 100644
--- a/drivers/scsi/arm/fas216.c
+++ b/drivers/scsi/arm/fas216.c
@@ -2650,9 +2650,9 @@ static void fas216_init_chip(FAS216_Info *info)
  * Returns: FAILED if unable to reset.
  * Notes: io_request_lock is taken, and irqs are disabled
  */
-int fas216_eh_host_reset(struct scsi_cmnd *SCpnt)
+int fas216_eh_host_reset(struct Scsi_Host *shost)
 {
-       FAS216_Info *info = (FAS216_Info *)SCpnt->device->host->hostdata;
+       FAS216_Info *info = (FAS216_Info *)shost->hostdata;
 
        spin_lock_irq(info->host->host_lock);
 
diff --git a/drivers/scsi/arm/fas216.h b/drivers/scsi/arm/fas216.h
index c57c16e..e0e74ee 100644
--- a/drivers/scsi/arm/fas216.h
+++ b/drivers/scsi/arm/fas216.h
@@ -383,11 +383,11 @@
  */
 extern int fas216_eh_bus_reset(struct scsi_cmnd *SCpnt);
 
-/* Function: int fas216_eh_host_reset(struct scsi_cmnd *SCpnt)
+/* Function: int fas216_eh_host_reset(struct Scsi_Host *shost)
  * Purpose : Reset the host associated with this command
- * Params  : SCpnt - command specifing host to reset
+ * Params  : shost - host to reset
  * Returns : FAILED if unable to reset
  */
-extern int fas216_eh_host_reset(struct scsi_cmnd *SCpnt);
+extern int fas216_eh_host_reset(struct Scsi_Host *shost);
 
 #endif /* FAS216_H */
diff --git a/drivers/scsi/atari_scsi.c b/drivers/scsi/atari_scsi.c
index 89f5154..d524dde 100644
--- a/drivers/scsi/atari_scsi.c
+++ b/drivers/scsi/atari_scsi.c
@@ -671,7 +671,7 @@ static void atari_scsi_falcon_reg_write(unsigned int reg, 
u8 value)
 
 #include "NCR5380.c"
 
-static int atari_scsi_host_reset(struct scsi_cmnd *cmd)
+static int atari_scsi_host_reset(struct Scsi_Host *shost)
 {
        int rv;
        unsigned long flags;
@@ -688,7 +688,7 @@ static int atari_scsi_host_reset(struct scsi_cmnd *cmd)
                atari_dma_orig_addr = NULL;
        }
 
-       rv = NCR5380_host_reset(cmd);
+       rv = NCR5380_host_reset(shost);
 
        /* The 5380 raises its IRQ line while _RST is active but the ST DMA
         * "lock" has been released so this interrupt may end up handled by
diff --git a/drivers/scsi/cxlflash/main.c b/drivers/scsi/cxlflash/main.c
index 7a787b6..462e8fc 100644
--- a/drivers/scsi/cxlflash/main.c
+++ b/drivers/scsi/cxlflash/main.c
@@ -2466,7 +2466,7 @@ static int cxlflash_eh_device_reset_handler(struct 
scsi_cmnd *scp)
 
 /**
  * cxlflash_eh_host_reset_handler() - reset the host adapter
- * @scp:       SCSI command from stack identifying host.
+ * @host:      SCSI host adapter.
  *
  * Following a reset, the state is evaluated again in case an EEH occurred
  * during the reset. In such a scenario, the host reset will either yield
@@ -2477,21 +2477,14 @@ static int cxlflash_eh_device_reset_handler(struct 
scsi_cmnd *scp)
  *     SUCCESS as defined in scsi/scsi.h
  *     FAILED as defined in scsi/scsi.h
  */
-static int cxlflash_eh_host_reset_handler(struct scsi_cmnd *scp)
+static int cxlflash_eh_host_reset_handler(struct Scsi_Host *host)
 {
        int rc = SUCCESS;
        int rcr = 0;
-       struct Scsi_Host *host = scp->device->host;
        struct cxlflash_cfg *cfg = shost_priv(host);
        struct device *dev = &cfg->dev->dev;
 
-       dev_dbg(dev, "%s: (scp=%p) %d/%d/%d/%llu "
-               "cdb=(%08x-%08x-%08x-%08x)\n", __func__, scp, host->host_no,
-               scp->device->channel, scp->device->id, scp->device->lun,
-               get_unaligned_be32(&((u32 *)scp->cmnd)[0]),
-               get_unaligned_be32(&((u32 *)scp->cmnd)[1]),
-               get_unaligned_be32(&((u32 *)scp->cmnd)[2]),
-               get_unaligned_be32(&((u32 *)scp->cmnd)[3]));
+       dev_dbg(dev, "%s: %d/-1/-1/-1\n", __func__, host->host_no);
 
        switch (cfg->state) {
        case STATE_NORMAL:
diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c
index 256dd67..d28f4a4 100644
--- a/drivers/scsi/dpt_i2o.c
+++ b/drivers/scsi/dpt_i2o.c
@@ -797,12 +797,12 @@ static int adpt_bus_reset(struct scsi_cmnd* cmd)
 }
 
 // This version of reset is called by the eh_error_handler
-static int __adpt_reset(struct scsi_cmnd* cmd)
+static int __adpt_reset(struct Scsi_Host* shost)
 {
        adpt_hba* pHba;
        int rcode;
-       pHba = (adpt_hba*)cmd->device->host->hostdata[0];
-       printk(KERN_WARNING"%s: Hba Reset: scsi id %d: tid: 
%d\n",pHba->name,cmd->device->channel,pHba->channel[cmd->device->channel].tid );
+       pHba = (adpt_hba*)shost->hostdata[0];
+       printk(KERN_WARNING"%s: Hba Reset\n",pHba->name);
        rcode =  adpt_hba_reset(pHba);
        if(rcode == 0){
                printk(KERN_WARNING"%s: HBA reset complete\n",pHba->name);
@@ -813,13 +813,13 @@ static int __adpt_reset(struct scsi_cmnd* cmd)
        }
 }
 
-static int adpt_reset(struct scsi_cmnd* cmd)
+static int adpt_reset(struct Scsi_Host* shost)
 {
        int rc;
 
-       spin_lock_irq(cmd->device->host->host_lock);
-       rc = __adpt_reset(cmd);
-       spin_unlock_irq(cmd->device->host->host_lock);
+       spin_lock_irq(shost->host_lock);
+       rc = __adpt_reset(shost);
+       spin_unlock_irq(shost->host_lock);
 
        return rc;
 }
diff --git a/drivers/scsi/dpti.h b/drivers/scsi/dpti.h
index 1fa345a..ba88ceb 100644
--- a/drivers/scsi/dpti.h
+++ b/drivers/scsi/dpti.h
@@ -31,7 +31,7 @@
 static int adpt_detect(struct scsi_host_template * sht);
 static int adpt_queue(struct Scsi_Host *h, struct scsi_cmnd * cmd);
 static int adpt_abort(struct scsi_cmnd * cmd);
-static int adpt_reset(struct scsi_cmnd* cmd);
+static int adpt_reset(struct Scsi_Host * host);
 static int adpt_release(struct Scsi_Host *host);
 static int adpt_slave_configure(struct scsi_device *);
 
diff --git a/drivers/scsi/eata.c b/drivers/scsi/eata.c
index 6501c33..187bfaf 100644
--- a/drivers/scsi/eata.c
+++ b/drivers/scsi/eata.c
@@ -507,7 +507,7 @@
 static int eata2x_release(struct Scsi_Host *);
 static int eata2x_queuecommand(struct Scsi_Host *, struct scsi_cmnd *);
 static int eata2x_eh_abort(struct scsi_cmnd *);
-static int eata2x_eh_host_reset(struct scsi_cmnd *);
+static int eata2x_eh_host_reset(struct Scsi_Host *);
 static int eata2x_bios_param(struct scsi_device *, struct block_device *,
                             sector_t, int *);
 static int eata2x_slave_configure(struct scsi_device *);
@@ -1896,20 +1896,16 @@ static int eata2x_eh_abort(struct scsi_cmnd *SCarg)
        panic("%s: abort, mbox %d, invalid cp_stat.\n", ha->board_name, i);
 }
 
-static int eata2x_eh_host_reset(struct scsi_cmnd *SCarg)
+static int eata2x_eh_host_reset(struct Scsi_Host *shost)
 {
        unsigned int i, time, k, c, limit = 0;
        struct scsi_cmnd *SCpnt;
-       struct Scsi_Host *shost = SCarg->device->host;
        struct hostdata *ha = (struct hostdata *)shost->hostdata;
 
-       scmd_printk(KERN_INFO, SCarg, "reset, enter.\n");
+       shost_printk(KERN_INFO, shost, "reset, enter.\n");
 
        spin_lock_irq(shost->host_lock);
 
-       if (SCarg->host_scribble == NULL)
-               printk("%s: reset, inactive.\n", ha->board_name);
-
        if (ha->in_reset) {
                printk("%s: reset, exit, already in reset.\n", ha->board_name);
                spin_unlock_irq(shost->host_lock);
diff --git a/drivers/scsi/eata_pio.c b/drivers/scsi/eata_pio.c
index 4299fa4..bf42876 100644
--- a/drivers/scsi/eata_pio.c
+++ b/drivers/scsi/eata_pio.c
@@ -435,19 +435,18 @@ static int eata_pio_abort(struct scsi_cmnd *cmd)
        panic("eata_pio: abort: invalid slot status\n");
 }
 
-static int eata_pio_host_reset(struct scsi_cmnd *cmd)
+static int eata_pio_host_reset(struct Scsi_Host *host)
 {
        unsigned int x, limit = 0;
        unsigned char success = 0;
        struct scsi_cmnd *sp;
-       struct Scsi_Host *host = cmd->device->host;
 
-       DBG(DBG_ABNORM, scmd_printk(KERN_WARNING, cmd,
+       DBG(DBG_ABNORM, shost_printk(KERN_WARNING, host,
                "eata_pio_reset called\n"));
 
        spin_lock_irq(host->host_lock);
 
-       if (HD(cmd)->state == RESET) {
+       if (SD(host)->state == RESET) {
                printk(KERN_WARNING "eata_pio_reset: exit, already in 
reset.\n");
                spin_unlock_irq(host->host_lock);
                return FAILED;
@@ -455,13 +454,13 @@ static int eata_pio_host_reset(struct scsi_cmnd *cmd)
 
        /* force all slots to be free */
 
-       for (x = 0; x < cmd->device->host->can_queue; x++) {
+       for (x = 0; x < host->can_queue; x++) {
 
-               if (HD(cmd)->ccb[x].status == FREE)
+               if (SD(host)->ccb[x].status == FREE)
                        continue;
 
-               sp = HD(cmd)->ccb[x].cmd;
-               HD(cmd)->ccb[x].status = RESET;
+               sp = SD(host)->ccb[x].cmd;
+               SD(host)->ccb[x].status = RESET;
                printk(KERN_WARNING "eata_pio_reset: slot %d in reset.\n", x);
 
                if (sp == NULL)
@@ -469,10 +468,10 @@ static int eata_pio_host_reset(struct scsi_cmnd *cmd)
        }
 
        /* hard reset the HBA  */
-       outb(EATA_CMD_RESET, cmd->device->host->base + HA_WCOMMAND);
+       outb(EATA_CMD_RESET, host->base + HA_WCOMMAND);
 
        DBG(DBG_ABNORM, printk(KERN_WARNING "eata_pio_reset: board reset 
done.\n"));
-       HD(cmd)->state = RESET;
+       SD(host)->state = RESET;
 
        spin_unlock_irq(host->host_lock);
        msleep(3000);
@@ -480,23 +479,23 @@ static int eata_pio_host_reset(struct scsi_cmnd *cmd)
 
        DBG(DBG_ABNORM, printk(KERN_WARNING "eata_pio_reset: interrupts 
disabled, " "loops %d.\n", limit));
 
-       for (x = 0; x < cmd->device->host->can_queue; x++) {
+       for (x = 0; x < host->can_queue; x++) {
 
                /* Skip slots already set free by interrupt */
-               if (HD(cmd)->ccb[x].status != RESET)
+               if (SD(host)->ccb[x].status != RESET)
                        continue;
 
-               sp = HD(cmd)->ccb[x].cmd;
+               sp = SD(host)->ccb[x].cmd;
                sp->result = DID_RESET << 16;
 
                /* This mailbox is terminated */
                printk(KERN_WARNING "eata_pio_reset: reset ccb %d.\n", x);
-               HD(cmd)->ccb[x].status = FREE;
+               SD(host)->ccb[x].status = FREE;
 
                sp->scsi_done(sp);
        }
 
-       HD(cmd)->state = 0;
+       SD(host)->state = 0;
 
        spin_unlock_irq(host->host_lock);
 
diff --git a/drivers/scsi/esas2r/esas2r.h b/drivers/scsi/esas2r/esas2r.h
index 1da6407..d130a59 100644
--- a/drivers/scsi/esas2r/esas2r.h
+++ b/drivers/scsi/esas2r/esas2r.h
@@ -977,7 +977,7 @@ u8 handle_hba_ioctl(struct esas2r_adapter *a,
 /* SCSI error handler (eh) functions */
 int esas2r_eh_abort(struct scsi_cmnd *cmd);
 int esas2r_device_reset(struct scsi_cmnd *cmd);
-int esas2r_host_reset(struct scsi_cmnd *cmd);
+int esas2r_host_reset(struct Scsi_Host *shost);
 int esas2r_bus_reset(struct scsi_cmnd *cmd);
 int esas2r_target_reset(struct scsi_cmnd *cmd);
 
diff --git a/drivers/scsi/esas2r/esas2r_main.c 
b/drivers/scsi/esas2r/esas2r_main.c
index f2e9d8a..4f6dbc8 100644
--- a/drivers/scsi/esas2r/esas2r_main.c
+++ b/drivers/scsi/esas2r/esas2r_main.c
@@ -1122,10 +1122,10 @@ int esas2r_eh_abort(struct scsi_cmnd *cmd)
        return SUCCESS;
 }
 
-static int esas2r_host_bus_reset(struct scsi_cmnd *cmd, bool host_reset)
+static int esas2r_host_bus_reset(struct Scsi_Host *shost, bool host_reset)
 {
        struct esas2r_adapter *a =
-               (struct esas2r_adapter *)cmd->device->host->hostdata;
+               (struct esas2r_adapter *)shost->hostdata;
 
        if (test_bit(AF_DEGRADED_MODE, &a->flags))
                return FAILED;
@@ -1150,18 +1150,20 @@ static int esas2r_host_bus_reset(struct scsi_cmnd *cmd, 
bool host_reset)
        return SUCCESS;
 }
 
-int esas2r_host_reset(struct scsi_cmnd *cmd)
+int esas2r_host_reset(struct Scsi_Host *shost)
 {
-       esas2r_log(ESAS2R_LOG_INFO, "host_reset (%p)", cmd);
+       esas2r_log(ESAS2R_LOG_INFO, "host_reset (%p)", shost);
 
-       return esas2r_host_bus_reset(cmd, true);
+       return esas2r_host_bus_reset(shost, true);
 }
 
 int esas2r_bus_reset(struct scsi_cmnd *cmd)
 {
-       esas2r_log(ESAS2R_LOG_INFO, "bus_reset (%p)", cmd);
+       struct Scsi_Host *shost = cmd->device->host;
+
+       esas2r_log(ESAS2R_LOG_INFO, "bus_reset (%p)", shost);
 
-       return esas2r_host_bus_reset(cmd, false);
+       return esas2r_host_bus_reset(shost, false);
 }
 
 static int esas2r_dev_targ_reset(struct scsi_cmnd *cmd, bool target_reset)
diff --git a/drivers/scsi/esp_scsi.c b/drivers/scsi/esp_scsi.c
index 71cb05b..15185a0 100644
--- a/drivers/scsi/esp_scsi.c
+++ b/drivers/scsi/esp_scsi.c
@@ -2655,9 +2655,9 @@ static int esp_eh_bus_reset_handler(struct scsi_cmnd *cmd)
 }
 
 /* All bets are off, reset the entire device.  */
-static int esp_eh_host_reset_handler(struct scsi_cmnd *cmd)
+static int esp_eh_host_reset_handler(struct Scsi_Host *shost)
 {
-       struct esp *esp = shost_priv(cmd->device->host);
+       struct esp *esp = shost_priv(shost);
        unsigned long flags;
 
        spin_lock_irqsave(esp->host->host_lock, flags);
diff --git a/drivers/scsi/fdomain.c b/drivers/scsi/fdomain.c
index ebbe5a3..d0b9583 100644
--- a/drivers/scsi/fdomain.c
+++ b/drivers/scsi/fdomain.c
@@ -1568,7 +1568,7 @@ static int fdomain_16x0_abort(struct scsi_cmnd *SCpnt)
    return SUCCESS;
 }
 
-int fdomain_16x0_host_reset(struct scsi_cmnd *SCpnt)
+int fdomain_16x0_host_reset(struct Scsi_Host *shost)
 {
    unsigned long flags;
 
diff --git a/drivers/scsi/fdomain.h b/drivers/scsi/fdomain.h
index 5cbe86b..85eab71 100644
--- a/drivers/scsi/fdomain.h
+++ b/drivers/scsi/fdomain.h
@@ -21,4 +21,4 @@
 extern struct scsi_host_template fdomain_driver_template;
 extern int fdomain_setup(char *str);
 extern struct Scsi_Host *__fdomain_16x0_detect(struct  scsi_host_template 
*tpnt );
-extern int fdomain_16x0_host_reset(struct scsi_cmnd *SCpnt);
+extern int fdomain_16x0_host_reset(struct Scsi_Host *shost);
diff --git a/drivers/scsi/fnic/fnic.h b/drivers/scsi/fnic/fnic.h
index 67aab96..35a4080 100644
--- a/drivers/scsi/fnic/fnic.h
+++ b/drivers/scsi/fnic/fnic.h
@@ -343,7 +343,7 @@ static inline struct fnic *fnic_from_ctlr(struct fcoe_ctlr 
*fip)
 int fnic_queuecommand(struct Scsi_Host *, struct scsi_cmnd *);
 int fnic_abort_cmd(struct scsi_cmnd *);
 int fnic_device_reset(struct scsi_cmnd *);
-int fnic_host_reset(struct scsi_cmnd *);
+int fnic_host_reset(struct Scsi_Host *);
 int fnic_reset(struct Scsi_Host *);
 void fnic_scsi_cleanup(struct fc_lport *);
 void fnic_scsi_abort_io(struct fc_lport *);
diff --git a/drivers/scsi/fnic/fnic_scsi.c b/drivers/scsi/fnic/fnic_scsi.c
index 242e2ee..2716222 100644
--- a/drivers/scsi/fnic/fnic_scsi.c
+++ b/drivers/scsi/fnic/fnic_scsi.c
@@ -2629,11 +2629,10 @@ int fnic_reset(struct Scsi_Host *shost)
  * host is offlined by SCSI.
  *
  */
-int fnic_host_reset(struct scsi_cmnd *sc)
+int fnic_host_reset(struct Scsi_Host *shost)
 {
        int ret;
        unsigned long wait_host_tmo;
-       struct Scsi_Host *shost = sc->device->host;
        struct fc_lport *lp = shost_priv(shost);
        struct fnic *fnic = lport_priv(lp);
        unsigned long flags;
diff --git a/drivers/scsi/hptiop.c b/drivers/scsi/hptiop.c
index 2fad7f0..d8b78ba 100644
--- a/drivers/scsi/hptiop.c
+++ b/drivers/scsi/hptiop.c
@@ -1104,12 +1104,12 @@ static int hptiop_reset_hba(struct hptiop_hba *hba)
        return 0;
 }
 
-static int hptiop_reset(struct scsi_cmnd *scp)
+static int hptiop_reset(struct Scsi_Host *host)
 {
-       struct hptiop_hba * hba = (struct hptiop_hba 
*)scp->device->host->hostdata;
+       struct hptiop_hba * hba = (struct hptiop_hba *)host->hostdata;
 
        printk(KERN_WARNING "hptiop_reset(%d/%d/%d)\n",
-              scp->device->host->host_no, -1, -1);
+              host->host_no, -1, -1);
 
        return hptiop_reset_hba(hba)? FAILED : SUCCESS;
 }
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
index bb033ce..5dccf07 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -2526,10 +2526,10 @@ static int ibmvfc_eh_target_reset_handler(struct 
scsi_cmnd *cmd)
  * @cmd:       struct scsi_cmnd having problems
  *
  **/
-static int ibmvfc_eh_host_reset_handler(struct scsi_cmnd *cmd)
+static int ibmvfc_eh_host_reset_handler(struct Scsi_Host *shost)
 {
        int rc;
-       struct ibmvfc_host *vhost = shost_priv(cmd->device->host);
+       struct ibmvfc_host *vhost = shost_priv(shost);
 
        dev_err(vhost->dev, "Resetting connection due to error recovery\n");
        rc = ibmvfc_issue_fc_host_lip(vhost->host);
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c
index 1deb0a9..262b30c 100644
--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
+++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
@@ -1731,10 +1731,10 @@ static int ibmvscsi_eh_device_reset_handler(struct 
scsi_cmnd *cmd)
  * ibmvscsi_eh_host_reset_handler - Reset the connection to the server
  * @cmd:       struct scsi_cmnd having problems
 */
-static int ibmvscsi_eh_host_reset_handler(struct scsi_cmnd *cmd)
+static int ibmvscsi_eh_host_reset_handler(struct Scsi_Host *shost)
 {
        unsigned long wait_switch = 0;
-       struct ibmvscsi_host_data *hostdata = shost_priv(cmd->device->host);
+       struct ibmvscsi_host_data *hostdata = shost_priv(shost);
 
        dev_err(hostdata->dev, "Resetting connection due to error recovery\n");
 
diff --git a/drivers/scsi/imm.c b/drivers/scsi/imm.c
index 87c9419..5232dfb 100644
--- a/drivers/scsi/imm.c
+++ b/drivers/scsi/imm.c
@@ -986,11 +986,11 @@ static void imm_reset_pulse(unsigned int base)
        w_ctr(base, 0x04);
 }
 
-static int imm_reset(struct scsi_cmnd *cmd)
+static int imm_reset(struct Scsi_Host *shost)
 {
-       imm_struct *dev = imm_dev(cmd->device->host);
+       imm_struct *dev = imm_dev(shost);
 
-       if (cmd->SCp.phase)
+       if (dev->cur_cmd->SCp.phase)
                imm_disconnect(dev);
        dev->cur_cmd = NULL;    /* Forget the problem */
 
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index b0c68d2..2ab2a9e 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -5152,14 +5152,14 @@ static int ipr_wait_for_ops(struct ipr_ioa_cfg 
*ioa_cfg, void *device,
        return SUCCESS;
 }
 
-static int ipr_eh_host_reset(struct scsi_cmnd *cmd)
+static int ipr_eh_host_reset(struct Scsi_Host *shost)
 {
        struct ipr_ioa_cfg *ioa_cfg;
        unsigned long lock_flags = 0;
        int rc = SUCCESS;
 
        ENTER;
-       ioa_cfg = (struct ipr_ioa_cfg *) cmd->device->host->hostdata;
+       ioa_cfg = (struct ipr_ioa_cfg *) shost->hostdata;
        spin_lock_irqsave(ioa_cfg->host->host_lock, lock_flags);
 
        if (!ioa_cfg->in_reset_reload && 
!ioa_cfg->hrrq[IPR_INIT_HRRQ].ioa_is_dead) {
diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c
index 97d9cca..8507fb0 100644
--- a/drivers/scsi/ips.c
+++ b/drivers/scsi/ips.c
@@ -227,7 +227,7 @@
 static int ips_detect(struct scsi_host_template *);
 static int ips_release(struct Scsi_Host *);
 static int ips_eh_abort(struct scsi_cmnd *);
-static int ips_eh_reset(struct scsi_cmnd *);
+static int ips_eh_reset(struct Scsi_Host *);
 static int ips_queue(struct Scsi_Host *, struct scsi_cmnd *);
 static const char *ips_info(struct Scsi_Host *);
 static irqreturn_t do_ipsintr(int, void *);
@@ -834,13 +834,12 @@ int ips_eh_abort(struct scsi_cmnd *SC)
 /* NOTE: this routine is called under the io_request_lock spinlock          */
 /*                                                                          */
 /****************************************************************************/
-static int __ips_eh_reset(struct scsi_cmnd *SC)
+static int __ips_eh_reset(struct Scsi_Host *shost)
 {
        int ret;
        int i;
        ips_ha_t *ha;
        ips_scb_t *scb;
-       ips_copp_wait_item_t *item;
 
        METHOD_TRACE("ips_eh_reset", 1);
 
@@ -848,13 +847,7 @@ static int __ips_eh_reset(struct scsi_cmnd *SC)
        return (FAILED);
 #else
 
-       if (!SC) {
-               DEBUG(1, "Reset called with NULL scsi command");
-
-               return (FAILED);
-       }
-
-       ha = (ips_ha_t *) SC->device->host->hostdata;
+       ha = (ips_ha_t *) shost->hostdata;
 
        if (!ha) {
                DEBUG(1, "Reset called with NULL ha struct");
@@ -1003,13 +996,13 @@ static int __ips_eh_reset(struct scsi_cmnd *SC)
 
 }
 
-static int ips_eh_reset(struct scsi_cmnd *SC)
+static int ips_eh_reset(struct Scsi_Host *shost)
 {
        int rc;
 
-       spin_lock_irq(SC->device->host->host_lock);
-       rc = __ips_eh_reset(SC);
-       spin_unlock_irq(SC->device->host->host_lock);
+       spin_lock_irq(shost->host_lock);
+       rc = __ips_eh_reset(shost);
+       spin_unlock_irq(shost->host_lock);
 
        return rc;
 }
@@ -1088,7 +1081,7 @@ static int ips_queue_lck(struct scsi_cmnd *SC, void 
(*done) (struct scsi_cmnd *)
                                return (0);
                        }
                        ha->ioctl_reset = 1;    /* This reset request is from 
an IOCTL */
-                       __ips_eh_reset(SC);
+                       __ips_eh_reset(SC->device->host);
                        SC->result = DID_OK << 16;
                        SC->scsi_done(SC);
                        return (0);
diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
index 772c35a..2ec903a 100644
--- a/drivers/scsi/libfc/fc_fcp.c
+++ b/drivers/scsi/libfc/fc_fcp.c
@@ -2212,11 +2212,10 @@ int fc_eh_device_reset(struct scsi_cmnd *sc_cmd)
 
 /**
  * fc_eh_host_reset() - Reset a Scsi_Host.
- * @sc_cmd: The SCSI command that identifies the SCSI host to be reset
+ * @shost: The SCSI host to be reset
  */
-int fc_eh_host_reset(struct scsi_cmnd *sc_cmd)
+int fc_eh_host_reset(struct Scsi_Host *shost)
 {
-       struct Scsi_Host *shost = sc_cmd->device->host;
        struct fc_lport *lport = shost_priv(shost);
        unsigned long wait_tmo;
 
diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
index 19b1202..79981b9 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -5310,9 +5310,8 @@ void lpfc_poll_timeout(unsigned long ptr)
  *  0x2002 - Success
  **/
 static int
-lpfc_host_reset_handler(struct scsi_cmnd *cmnd)
+lpfc_host_reset_handler(struct Scsi_Host *shost)
 {
-       struct Scsi_Host *shost = cmnd->device->host;
        struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata;
        struct lpfc_hba *phba = vport->phba;
        int rc, ret = SUCCESS;
diff --git a/drivers/scsi/mac53c94.c b/drivers/scsi/mac53c94.c
index a6682c5..120a719 100644
--- a/drivers/scsi/mac53c94.c
+++ b/drivers/scsi/mac53c94.c
@@ -101,14 +101,14 @@ static int mac53c94_queue_lck(struct scsi_cmnd *cmd, void 
(*done)(struct scsi_cm
 
 static DEF_SCSI_QCMD(mac53c94_queue)
 
-static int mac53c94_host_reset(struct scsi_cmnd *cmd)
+static int mac53c94_host_reset(struct Scsi_Host *shost)
 {
-       struct fsc_state *state = (struct fsc_state *) 
cmd->device->host->hostdata;
+       struct fsc_state *state = (struct fsc_state *) shost->hostdata;
        struct mac53c94_regs __iomem *regs = state->regs;
        struct dbdma_regs __iomem *dma = state->dma;
        unsigned long flags;
 
-       spin_lock_irqsave(cmd->device->host->host_lock, flags);
+       spin_lock_irqsave(shost->host_lock, flags);
 
        writel((RUN|PAUSE|FLUSH|WAKE) << 16, &dma->control);
        writeb(CMD_SCSI_RESET, &regs->command); /* assert RST */
@@ -118,7 +118,7 @@ static int mac53c94_host_reset(struct scsi_cmnd *cmd)
        mac53c94_init(state);
        writeb(CMD_NOP, &regs->command);
 
-       spin_unlock_irqrestore(cmd->device->host->host_lock, flags);
+       spin_unlock_irqrestore(shost->host_lock, flags);
        return SUCCESS;
 }
 
diff --git a/drivers/scsi/megaraid.c b/drivers/scsi/megaraid.c
index 7e504d3..f7a79f8 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -1887,13 +1887,13 @@ static DEF_SCSI_QCMD(megaraid_queue)
 
 
 static int
-megaraid_reset(struct scsi_cmnd *cmd)
+megaraid_reset(struct Scsi_Host *shost)
 {
        adapter_t       *adapter;
        megacmd_t       mc;
        int             rval;
 
-       adapter = (adapter_t *)cmd->device->host->hostdata;
+       adapter = (adapter_t *)shost->hostdata;
 
 #if MEGA_HAVE_CLUSTERING
        mc.cmd = MEGA_CLUSTER_CMD;
diff --git a/drivers/scsi/megaraid.h b/drivers/scsi/megaraid.h
index 508d65e..6fb6adf 100644
--- a/drivers/scsi/megaraid.h
+++ b/drivers/scsi/megaraid.h
@@ -963,7 +963,7 @@ struct mega_hbas {
 static void mega_free_scb(adapter_t *, scb_t *);
 
 static int megaraid_abort(Scsi_Cmnd *);
-static int megaraid_reset(Scsi_Cmnd *);
+static int megaraid_reset(struct Scsi_Host *);
 static int megaraid_abort_and_reset(adapter_t *, Scsi_Cmnd *, int);
 static int megaraid_biosparam(struct scsi_device *, struct block_device *,
                sector_t, int []);
diff --git a/drivers/scsi/megaraid/megaraid_mbox.c 
b/drivers/scsi/megaraid/megaraid_mbox.c
index 3f914b1..85e8a2f 100644
--- a/drivers/scsi/megaraid/megaraid_mbox.c
+++ b/drivers/scsi/megaraid/megaraid_mbox.c
@@ -97,7 +97,7 @@
 static void megaraid_sysfs_free_resources(adapter_t *);
 
 static int megaraid_abort_handler(struct scsi_cmnd *);
-static int megaraid_reset_handler(struct scsi_cmnd *);
+static int megaraid_reset_handler(struct Scsi_Host *);
 
 static int mbox_post_sync_cmd(adapter_t *, uint8_t []);
 static int mbox_post_sync_cmd_fast(adapter_t *, uint8_t []);
@@ -2567,7 +2567,7 @@ static DEF_SCSI_QCMD(megaraid_queue_command)
  * host.
  **/
 static int
-megaraid_reset_handler(struct scsi_cmnd *scp)
+megaraid_reset_handler(struct Scsi_Host *shost)
 {
        adapter_t       *adapter;
        scb_t           *scb;
@@ -2581,7 +2581,7 @@ static DEF_SCSI_QCMD(megaraid_queue_command)
        int             i;
        uioc_t          *kioc;
 
-       adapter         = SCP2ADAPTER(scp);
+       adapter         = (adapter_t *)SCSIHOST2ADAP(shost);
        raid_dev        = ADAP2RAIDDEV(adapter);
 
        // return failure if adapter is not responding
@@ -2613,15 +2613,9 @@ static DEF_SCSI_QCMD(megaraid_queue_command)
 
                        megaraid_mbox_mm_done(adapter, scb);
                } else {
-                       if (scb->scp == scp) {  // Found command
-                               con_log(CL_ANN, (KERN_WARNING
-                                       "megaraid: %d[%d:%d], reset from 
pending list\n",
-                                       scb->sno, scb->dev_channel, 
scb->dev_target));
-                       } else {
-                               con_log(CL_ANN, (KERN_WARNING
+                       con_log(CL_ANN, (KERN_WARNING
                                "megaraid: IO packet with %d[%d:%d] being 
reset\n",
                                scb->sno, scb->dev_channel, scb->dev_target));
-                       }
 
                        scb->scp->result = (DID_RESET << 16);
                        scb->scp->scsi_done(scb->scp);
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c 
b/drivers/scsi/megaraid/megaraid_sas_base.c
index 316c3df..89e3fd6 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -2691,15 +2691,14 @@ static int megasas_wait_for_outstanding(struct 
megasas_instance *instance)
  * reset requests. Device, bus and host specific reset handlers can use this
  * function after they do their specific tasks.
  */
-static int megasas_generic_reset(struct scsi_cmnd *scmd)
+static int megasas_generic_reset(struct Scsi_Host *shost)
 {
        int ret_val;
        struct megasas_instance *instance;
 
-       instance = (struct megasas_instance *)scmd->device->host->hostdata;
+       instance = (struct megasas_instance *)shost->hostdata;
 
-       scmd_printk(KERN_NOTICE, scmd, "megasas: RESET cmd=%x retries=%x\n",
-                scmd->cmnd[0], scmd->retries);
+       shost_printk(KERN_NOTICE, shost, "megasas: RESET\n");
 
        if (atomic_read(&instance->adprecovery) == MEGASAS_HW_CRITICAL_ERROR) {
                dev_err(&instance->pdev->dev, "cannot recover from previous 
reset failures\n");
@@ -2768,34 +2767,29 @@ blk_eh_timer_return megasas_reset_timer(struct 
scsi_cmnd *scmd)
 /**
  * megasas_reset_bus_host -    Bus & host reset handler entry point
  */
-static int megasas_reset_bus_host(struct scsi_cmnd *scmd)
+static int megasas_reset_bus_host(struct Scsi_Host *shost)
 {
        int ret;
        struct megasas_instance *instance;
 
-       instance = (struct megasas_instance *)scmd->device->host->hostdata;
+       instance = (struct megasas_instance *)shost->hostdata;
 
-       scmd_printk(KERN_INFO, scmd,
+       shost_printk(KERN_INFO, shost,
                "Controller reset is requested due to IO timeout\n"
-               "SCSI command pointer: (%p)\t SCSI host state: %d\t"
+               "SCSI host state: %d\t"
                " SCSI host busy: %d\t FW outstanding: %d\n",
-               scmd, scmd->device->host->shost_state,
-               atomic_read((atomic_t *)&scmd->device->host->host_busy),
+               shost->shost_state,
+               atomic_read(&shost->host_busy),
                atomic_read(&instance->fw_outstanding));
 
        /*
         * First wait for all commands to complete
         */
        if (instance->ctrl_context) {
-               struct megasas_cmd_fusion *cmd;
-               cmd = (struct megasas_cmd_fusion *)scmd->SCp.ptr;
-               if (cmd)
-                       megasas_dump_frame(cmd->io_request,
-                               sizeof(struct MPI2_RAID_SCSI_IO_REQUEST));
-               ret = megasas_reset_fusion(scmd->device->host,
+               ret = megasas_reset_fusion(shost,
                                SCSIIO_TIMEOUT_OCR);
        } else
-               ret = megasas_generic_reset(scmd);
+               ret = megasas_generic_reset(shost);
 
        return ret;
 }
diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c
index 1753e42..6067d3c 100644
--- a/drivers/scsi/mesh.c
+++ b/drivers/scsi/mesh.c
@@ -1700,9 +1700,9 @@ static int mesh_abort(struct scsi_cmnd *cmd)
  * The midlayer will wait for devices to come back, we don't need
  * to do that ourselves
  */
-static int mesh_host_reset(struct scsi_cmnd *cmd)
+static int mesh_host_reset(struct Scsi_Host *shost)
 {
-       struct mesh_state *ms = (struct mesh_state *) 
cmd->device->host->hostdata;
+       struct mesh_state *ms = (struct mesh_state *) shost->hostdata;
        volatile struct mesh_regs __iomem *mr = ms->mesh;
        volatile struct dbdma_regs __iomem *md = ms->dma;
        unsigned long flags;
@@ -1716,7 +1716,7 @@ static int mesh_host_reset(struct scsi_cmnd *cmd)
        out_8(&mr->exception, 0xff);    /* clear all exception bits */
        out_8(&mr->error, 0xff);        /* clear all error bits */
        out_8(&mr->sequence, SEQ_RESETMESH);
-               mesh_flush_io(mr);
+       mesh_flush_io(mr);
        udelay(1);
        out_8(&mr->intr_mask, INT_ERROR | INT_EXCEPTION | INT_CMDDONE);
        out_8(&mr->source_id, ms->host->this_id);
@@ -1725,13 +1725,13 @@ static int mesh_host_reset(struct scsi_cmnd *cmd)
 
        /* Reset the bus */
        out_8(&mr->bus_status1, BS1_RST);       /* assert RST */
-               mesh_flush_io(mr);
+       mesh_flush_io(mr);
        udelay(30);                     /* leave it on for >= 25us */
        out_8(&mr->bus_status1, 0);     /* negate RST */
 
        /* Complete pending commands */
        handle_reset(ms);
-       
+
        spin_unlock_irqrestore(ms->host->host_lock, flags);
        return SUCCESS;
 }
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c 
b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 22998cb..6ecf672 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -2643,14 +2643,13 @@ int mpt3sas_scsih_issue_locked_tm(struct 
MPT3SAS_ADAPTER *ioc, u16 handle,
  * Returns SUCCESS if command aborted else FAILED
  */
 static int
-scsih_host_reset(struct scsi_cmnd *scmd)
+scsih_host_reset(struct Scsi_Host *shost)
 {
-       struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host);
+       struct MPT3SAS_ADAPTER *ioc = shost_priv(shost);
        int r, retval;
 
-       pr_info(MPT3SAS_FMT "attempting host reset! scmd(%p)\n",
-           ioc->name, scmd);
-       scsi_print_command(scmd);
+       pr_info(MPT3SAS_FMT "attempting host reset!\n",
+           ioc->name);
 
        if (ioc->is_driver_loading) {
                pr_info(MPT3SAS_FMT "Blocking the host reset\n",
@@ -2662,8 +2661,8 @@ int mpt3sas_scsih_issue_locked_tm(struct MPT3SAS_ADAPTER 
*ioc, u16 handle,
        retval = mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER);
        r = (retval < 0) ? FAILED : SUCCESS;
 out:
-       pr_info(MPT3SAS_FMT "host reset: %s scmd(%p)\n",
-           ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd);
+       pr_info(MPT3SAS_FMT "host reset: %s\n",
+           ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"));
 
        return r;
 }
diff --git a/drivers/scsi/mvumi.c b/drivers/scsi/mvumi.c
index fe97401..d76b958 100644
--- a/drivers/scsi/mvumi.c
+++ b/drivers/scsi/mvumi.c
@@ -709,14 +709,13 @@ static int mvumi_reset_host_9143(struct mvumi_hba *mhba)
        return mvumi_wait_for_outstanding(mhba);
 }
 
-static int mvumi_host_reset(struct scsi_cmnd *scmd)
+static int mvumi_host_reset(struct Scsi_Host *shost)
 {
        struct mvumi_hba *mhba;
 
-       mhba = (struct mvumi_hba *) scmd->device->host->hostdata;
+       mhba = (struct mvumi_hba *) shost->hostdata;
 
-       scmd_printk(KERN_NOTICE, scmd, "RESET -%ld cmd=%x retries=%x\n",
-                       scmd->serial_number, scmd->cmnd[0], scmd->retries);
+       shost_printk(KERN_NOTICE, shost, "RESET\n");
 
        return mhba->instancet->reset_host(mhba);
 }
diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c
index 107e191..f511dd8 100644
--- a/drivers/scsi/nsp32.c
+++ b/drivers/scsi/nsp32.c
@@ -2885,23 +2885,21 @@ static void nsp32_do_bus_reset(nsp32_hw_data *data)
        data->CurrentSC = NULL;
 }
 
-static int nsp32_eh_host_reset(struct scsi_cmnd *SCpnt)
+static int nsp32_eh_host_reset(struct Scsi_Host *host)
 {
-       struct Scsi_Host *host = SCpnt->device->host;
-       unsigned int      base = SCpnt->device->host->io_port;
+       unsigned int      base = host->io_port;
        nsp32_hw_data    *data = (nsp32_hw_data *)host->hostdata;
 
-       nsp32_msg(KERN_INFO, "Host Reset");     
-       nsp32_dbg(NSP32_DEBUG_BUSRESET, "SCpnt=0x%x", SCpnt);
+       nsp32_msg(KERN_INFO, "Host Reset");
 
-       spin_lock_irq(SCpnt->device->host->host_lock);
+       spin_lock_irq(host->host_lock);
 
        nsp32hw_init(data);
        nsp32_write2(base, IRQ_CONTROL, IRQ_CONTROL_ALL_IRQ_MASK);
        nsp32_do_bus_reset(data);
        nsp32_write2(base, IRQ_CONTROL, 0);
 
-       spin_unlock_irq(SCpnt->device->host->host_lock);
+       spin_unlock_irq(host->host_lock);
        return SUCCESS; /* Host reset is succeeded at any time. */
 }
 
diff --git a/drivers/scsi/pcmcia/aha152x_stub.c 
b/drivers/scsi/pcmcia/aha152x_stub.c
index 7d1609f..f95abd9 100644
--- a/drivers/scsi/pcmcia/aha152x_stub.c
+++ b/drivers/scsi/pcmcia/aha152x_stub.c
@@ -197,7 +197,7 @@ static int aha152x_resume(struct pcmcia_device *link)
 {
        scsi_info_t *info = link->priv;
 
-       aha152x_host_reset_host(info->host);
+       aha152x_host_reset(info->host);
 
        return 0;
 }
diff --git a/drivers/scsi/pcmcia/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c
index 5fb6eef..48ec923 100644
--- a/drivers/scsi/pcmcia/nsp_cs.c
+++ b/drivers/scsi/pcmcia/nsp_cs.c
@@ -1485,9 +1485,9 @@ static int nsp_eh_bus_reset(struct scsi_cmnd *SCpnt)
        return nsp_bus_reset(data);
 }
 
-static int nsp_eh_host_reset(struct scsi_cmnd *SCpnt)
+static int nsp_eh_host_reset(struct Scsi_Host *host)
 {
-       nsp_hw_data *data = (nsp_hw_data *)SCpnt->device->host->hostdata;
+       nsp_hw_data *data = (nsp_hw_data *)host->hostdata;
 
        nsp_dbg(NSP_DEBUG_BUSRESET, "in");
 
diff --git a/drivers/scsi/pcmcia/qlogic_stub.c 
b/drivers/scsi/pcmcia/qlogic_stub.c
index 0556054..ab68880 100644
--- a/drivers/scsi/pcmcia/qlogic_stub.c
+++ b/drivers/scsi/pcmcia/qlogic_stub.c
@@ -263,8 +263,8 @@ static int qlogic_resume(struct pcmcia_device *link)
                outb(0x24, link->resource[0]->start + 0x9);
                outb(0x04, link->resource[0]->start + 0xd);
        }
-       /* Ugggglllyyyy!!! */
-       qlogicfas408_host_reset(NULL);
+
+       qlogicfas408_host_reset(info->host);
 
        return 0;
 }
diff --git a/drivers/scsi/pcmcia/sym53c500_cs.c 
b/drivers/scsi/pcmcia/sym53c500_cs.c
index 20011c8..d0ee84c 100644
--- a/drivers/scsi/pcmcia/sym53c500_cs.c
+++ b/drivers/scsi/pcmcia/sym53c500_cs.c
@@ -586,14 +586,14 @@ enum Phase {
 static DEF_SCSI_QCMD(SYM53C500_queue)
 
 static int 
-SYM53C500_host_reset(struct scsi_cmnd *SCpnt)
+SYM53C500_host_reset(struct Scsi_Host *shost)
 {
-       int port_base = SCpnt->device->host->io_port;
+       int port_base = shost->io_port;
 
        DEB(printk("SYM53C500_host_reset called\n"));
-       spin_lock_irq(SCpnt->device->host->host_lock);
+       spin_lock_irq(shost->host_lock);
        SYM53C500_int_host_reset(port_base);
-       spin_unlock_irq(SCpnt->device->host->host_lock);
+       spin_unlock_irq(shost->host_lock);
 
        return SUCCESS;
 }
diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
index 1cc814f..4b66b92 100644
--- a/drivers/scsi/pmcraid.c
+++ b/drivers/scsi/pmcraid.c
@@ -3089,19 +3089,19 @@ static int pmcraid_eh_target_reset_handler(struct 
scsi_cmnd *scmd)
 /**
  * pmcraid_eh_host_reset_handler - adapter reset handler callback
  *
- * @scmd: pointer to scsi_cmd that was sent to a resource of adapter
+ * @shost: pointer to scsi_host
  *
  * Initiates adapter reset to bring it up to operational state
  *
  * Return value
  *     SUCCESS or FAILED
  */
-static int pmcraid_eh_host_reset_handler(struct scsi_cmnd *scmd)
+static int pmcraid_eh_host_reset_handler(struct Scsi_Host *shost)
 {
        unsigned long interval = 10000; /* 10 seconds interval */
        int waits = jiffies_to_msecs(PMCRAID_RESET_HOST_TIMEOUT) / interval;
        struct pmcraid_instance *pinstance =
-               (struct pmcraid_instance *)(scmd->device->host->hostdata);
+               (struct pmcraid_instance *)(shost->hostdata);
 
 
        /* wait for an additional 150 seconds just in case firmware could come
diff --git a/drivers/scsi/ppa.c b/drivers/scsi/ppa.c
index 7be5823..0ce0f9a 100644
--- a/drivers/scsi/ppa.c
+++ b/drivers/scsi/ppa.c
@@ -857,11 +857,11 @@ static void ppa_reset_pulse(unsigned int base)
        w_ctr(base, 0xc);
 }
 
-static int ppa_reset(struct scsi_cmnd *cmd)
+static int ppa_reset(struct Scsi_Host *shost)
 {
-       ppa_struct *dev = ppa_dev(cmd->device->host);
+       ppa_struct *dev = ppa_dev(shost);
 
-       if (cmd->SCp.phase)
+       if (dev->cur_cmd->SCp.phase)
                ppa_disconnect(dev);
        dev->cur_cmd = NULL;    /* Forget the problem */
 
diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c
index d48a13a..b06ef7c 100644
--- a/drivers/scsi/qedf/qedf_main.c
+++ b/drivers/scsi/qedf/qedf_main.c
@@ -666,12 +666,12 @@ static void qedf_ctx_soft_reset(struct fc_lport *lport)
 }
 
 /* Reset the host by gracefully logging out and then logging back in */
-static int qedf_eh_host_reset(struct scsi_cmnd *sc_cmd)
+static int qedf_eh_host_reset(struct Scsi_Host *shost)
 {
        struct fc_lport *lport;
        struct qedf_ctx *qedf;
 
-       lport = shost_priv(sc_cmd->device->host);
+       lport = shost_priv(shost);
        qedf = lport_priv(lport);
 
        if (atomic_read(&qedf->link_state) == QEDF_LINK_DOWN ||
diff --git a/drivers/scsi/qedi/qedi_iscsi.c b/drivers/scsi/qedi/qedi_iscsi.c
index 87f0af3..3fa489e 100644
--- a/drivers/scsi/qedi/qedi_iscsi.c
+++ b/drivers/scsi/qedi/qedi_iscsi.c
@@ -33,9 +33,8 @@ int qedi_recover_all_conns(struct qedi_ctx *qedi)
        return SUCCESS;
 }
 
-static int qedi_eh_host_reset(struct scsi_cmnd *cmd)
+static int qedi_eh_host_reset(struct Scsi_Host *shost)
 {
-       struct Scsi_Host *shost = cmd->device->host;
        struct qedi_ctx *qedi;
 
        qedi = iscsi_host_priv(shost);
diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
index d712bfe..c6240ce 100644
--- a/drivers/scsi/qla1280.c
+++ b/drivers/scsi/qla1280.c
@@ -1033,10 +1033,9 @@ static void qla1280_mailbox_timeout(unsigned long __data)
  *     Reset the specified adapter (both channels)
  **************************************************************************/
 static int
-qla1280_eh_adapter_reset(struct scsi_cmnd *cmd)
+qla1280_eh_adapter_reset(struct Scsi_Host *shost)
 {
        int rc;
-       struct Scsi_Host *shost = cmd->device->host;
        struct scsi_qla_host *ha = (struct scsi_qla_host *)shost->hostdata;
 
        spin_lock_irq(shost->host_lock);
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index df57655..fe2ff0a 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -275,7 +275,7 @@
 static int qla2xxx_eh_device_reset(struct scsi_cmnd *);
 static int qla2xxx_eh_target_reset(struct scsi_cmnd *);
 static int qla2xxx_eh_bus_reset(struct scsi_cmnd *);
-static int qla2xxx_eh_host_reset(struct scsi_cmnd *);
+static int qla2xxx_eh_host_reset(struct Scsi_Host *);
 
 static void qla2x00_clear_drv_active(struct qla_hw_data *);
 static void qla2x00_free_device(scsi_qla_host_t *);
@@ -1550,8 +1550,7 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha)
 *    The reset function will reset the Adapter.
 *
 * Input:
-*      cmd = Linux SCSI command packet of the command that cause the
-*            adapter reset.
+*      shost = Linux SCSI host to be reset
 *
 * Returns:
 *      Either SUCCESS or FAILED.
@@ -1559,13 +1558,11 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha)
 * Note:
 **************************************************************************/
 static int
-qla2xxx_eh_host_reset(struct scsi_cmnd *cmd)
+qla2xxx_eh_host_reset(struct Scsi_Host *shost)
 {
-       scsi_qla_host_t *vha = shost_priv(cmd->device->host);
+       scsi_qla_host_t *vha = shost_priv(shost);
        struct qla_hw_data *ha = vha->hw;
        int ret = FAILED;
-       unsigned int id;
-       uint64_t lun;
        scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev);
 
        if (qla2x00_isp_reg_stat(ha)) {
@@ -1575,11 +1572,8 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha)
                return SUCCESS;
        }
 
-       id = cmd->device->id;
-       lun = cmd->device->lun;
-
        ql_log(ql_log_info, vha, 0x8018,
-           "ADAPTER RESET ISSUED nexus=%ld:%d:%llu.\n", vha->host_no, id, lun);
+           "ADAPTER RESET ISSUED host=%ld.\n", vha->host_no);
 
        /*
         * No point in issuing another reset if one is active.  Also do not
@@ -1625,8 +1619,8 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha)
 
 eh_host_reset_lock:
        ql_log(ql_log_info, vha, 0x8017,
-           "ADAPTER RESET %s nexus=%ld:%d:%llu.\n",
-           (ret == FAILED) ? "FAILED" : "SUCCEEDED", vha->host_no, id, lun);
+           "ADAPTER RESET %s host=%ld.\n",
+           (ret == FAILED) ? "FAILED" : "SUCCEEDED", vha->host_no);
 
        return ret;
 }
diff --git a/drivers/scsi/qla4xxx/ql4_os.c b/drivers/scsi/qla4xxx/ql4_os.c
index 64c6fa5..11bd2da 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -160,7 +160,7 @@ static int qla4xxx_set_chap_entry(struct Scsi_Host *shost, 
void  *data,
 static int qla4xxx_eh_abort(struct scsi_cmnd *cmd);
 static int qla4xxx_eh_device_reset(struct scsi_cmnd *cmd);
 static int qla4xxx_eh_target_reset(struct scsi_cmnd *cmd);
-static int qla4xxx_eh_host_reset(struct scsi_cmnd *cmd);
+static int qla4xxx_eh_host_reset(struct Scsi_Host *shost);
 static int qla4xxx_slave_alloc(struct scsi_device *device);
 static umode_t qla4_attr_is_visible(int param_type, int param);
 static int qla4xxx_host_reset(struct Scsi_Host *shost, int reset_type);
@@ -9367,17 +9367,17 @@ static int qla4xxx_is_eh_active(struct Scsi_Host *shost)
 
 /**
  * qla4xxx_eh_host_reset - kernel callback
- * @cmd: Pointer to Linux's SCSI command structure
+ * @host: Pointer to Linux's SCSI host structure
  *
  * This routine is invoked by the Linux kernel to perform fatal error
  * recovery on the specified adapter.
  **/
-static int qla4xxx_eh_host_reset(struct scsi_cmnd *cmd)
+static int qla4xxx_eh_host_reset(struct Scsi_Host *host)
 {
        int return_status = FAILED;
        struct scsi_qla_host *ha;
 
-       ha = to_qla_host(cmd->device->host);
+       ha = to_qla_host(host);
 
        if ((is_qla8032(ha) || is_qla8042(ha)) && ql4xdontresethba)
                qla4_83xx_set_idc_dontreset(ha);
@@ -9393,20 +9393,18 @@ static int qla4xxx_eh_host_reset(struct scsi_cmnd *cmd)
                     ha->host_no, __func__));
 
                /* Clear outstanding srb in queues */
-               if (qla4xxx_is_eh_active(cmd->device->host))
+               if (qla4xxx_is_eh_active(host))
                        qla4xxx_abort_active_cmds(ha, DID_ABORT << 16);
 
                return FAILED;
        }
 
        ql4_printk(KERN_INFO, ha,
-                  "scsi(%ld:%d:%d:%llu): HOST RESET ISSUED.\n", ha->host_no,
-                  cmd->device->channel, cmd->device->id, cmd->device->lun);
+                  "scsi%ld: HOST RESET ISSUED.\n", ha->host_no);
 
        if (qla4xxx_wait_for_hba_online(ha) != QLA_SUCCESS) {
-               DEBUG2(printk("scsi%ld:%d: %s: Unable to reset host.  Adapter "
-                             "DEAD.\n", ha->host_no, cmd->device->channel,
-                             __func__));
+               DEBUG2(printk("scsi%ld: %s: Unable to reset host.  Adapter "
+                             "DEAD.\n", ha->host_no, __func__));
 
                return FAILED;
        }
diff --git a/drivers/scsi/qlogicfas408.c b/drivers/scsi/qlogicfas408.c
index 8b471a9..83a17ef 100644
--- a/drivers/scsi/qlogicfas408.c
+++ b/drivers/scsi/qlogicfas408.c
@@ -498,20 +498,18 @@ int qlogicfas408_abort(struct scsi_cmnd *cmd)
 
 /*
  *     Reset SCSI bus
- *     FIXME: This function is invoked with cmd = NULL directly by
- *     the PCMCIA qlogic_stub code. This wants fixing
  */
 
-int qlogicfas408_host_reset(struct scsi_cmnd *cmd)
+int qlogicfas408_host_reset(struct Scsi_Host *host)
 {
-       struct qlogicfas408_priv *priv = get_priv_by_cmd(cmd);
+       struct qlogicfas408_priv *priv = get_priv_by_host(host);
        unsigned long flags;
 
        priv->qabort = 2;
 
-       spin_lock_irqsave(cmd->device->host->host_lock, flags);
+       spin_lock_irqsave(host->host_lock, flags);
        ql_zap(priv);
-       spin_unlock_irqrestore(cmd->device->host->host_lock, flags);
+       spin_unlock_irqrestore(host->host_lock, flags);
 
        return SUCCESS;
 }
diff --git a/drivers/scsi/qlogicfas408.h b/drivers/scsi/qlogicfas408.h
index f6b1216..58459ba 100644
--- a/drivers/scsi/qlogicfas408.h
+++ b/drivers/scsi/qlogicfas408.h
@@ -108,7 +108,7 @@ int qlogicfas408_biosparam(struct scsi_device * disk,
                           struct block_device *dev,
                           sector_t capacity, int ip[]);
 int qlogicfas408_abort(struct scsi_cmnd * cmd);
-extern int qlogicfas408_host_reset(struct scsi_cmnd *cmd);
+extern int qlogicfas408_host_reset(struct Scsi_Host *host);
 const char *qlogicfas408_info(struct Scsi_Host *host);
 int qlogicfas408_get_chip_type(int qbase, int int_type);
 void qlogicfas408_setup(int qbase, int id, int int_type);
diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c
index dc095a2..ebf525b 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -3878,27 +3878,27 @@ static int scsi_debug_bus_reset(struct scsi_cmnd * 
SCpnt)
        return SUCCESS;
 }
 
-static int scsi_debug_host_reset(struct scsi_cmnd * SCpnt)
+static int scsi_debug_host_reset(struct Scsi_Host * shost)
 {
        struct sdebug_host_info * sdbg_host;
        struct sdebug_dev_info *devip;
        int k = 0;
 
        ++num_host_resets;
-       if ((SCpnt->device) && (SDEBUG_OPT_ALL_NOISE & sdebug_opts))
-               sdev_printk(KERN_INFO, SCpnt->device, "%s\n", __func__);
-        spin_lock(&sdebug_host_list_lock);
-        list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
+       if (SDEBUG_OPT_ALL_NOISE & sdebug_opts)
+               shost_printk(KERN_INFO, shost, "%s\n", __func__);
+       spin_lock(&sdebug_host_list_lock);
+       list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
                list_for_each_entry(devip, &sdbg_host->dev_info_list,
                                    dev_list) {
                        set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
                        ++k;
                }
-        }
-        spin_unlock(&sdebug_host_list_lock);
+       }
+       spin_unlock(&sdebug_host_list_lock);
        stop_all_queued();
        if (SDEBUG_OPT_RESET_NOISE & sdebug_opts)
-               sdev_printk(KERN_INFO, SCpnt->device,
+               shost_printk(KERN_INFO, shost,
                            "%s: %d device(s) found\n", __func__, k);
        return SUCCESS;
 }
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index ac31964..808167f 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -745,7 +745,7 @@ static int scsi_try_host_reset(struct scsi_cmnd *scmd)
        if (!hostt->eh_host_reset_handler)
                return FAILED;
 
-       rtn = hostt->eh_host_reset_handler(scmd);
+       rtn = hostt->eh_host_reset_handler(host);
 
        if (rtn == SUCCESS) {
                if (!hostt->skip_settle_delay)
diff --git a/drivers/scsi/snic/snic.h b/drivers/scsi/snic/snic.h
index 46837ee9..9171b90 100644
--- a/drivers/scsi/snic/snic.h
+++ b/drivers/scsi/snic/snic.h
@@ -380,8 +380,7 @@ struct snic_global {
 int snic_queuecommand(struct Scsi_Host *, struct scsi_cmnd *);
 int snic_abort_cmd(struct scsi_cmnd *);
 int snic_device_reset(struct scsi_cmnd *);
-int snic_host_reset(struct scsi_cmnd *);
-int snic_reset(struct Scsi_Host *);
+int snic_host_reset(struct Scsi_Host *);
 void snic_shutdown_scsi_cleanup(struct snic *);
 
 
diff --git a/drivers/scsi/snic/snic_scsi.c b/drivers/scsi/snic/snic_scsi.c
index 56b0eb4..ec11293 100644
--- a/drivers/scsi/snic/snic_scsi.c
+++ b/drivers/scsi/snic/snic_scsi.c
@@ -2307,8 +2307,15 @@
        return ret;
 } /* end of snic_issue_hba_reset */
 
+/*
+ * SCSI Error handling calls driver's eh_host_reset if all prior
+ * error handling levels return FAILED.
+ *
+ * Host Reset is the highest level of error recovery. If this fails, then
+ * host is offlined by SCSI.
+ */
 int
-snic_reset(struct Scsi_Host *shost)
+snic_host_reset(struct Scsi_Host *shost)
 {
        struct snic *snic = shost_priv(shost);
        struct scsi_cmnd *sc = NULL;
@@ -2373,26 +2380,6 @@
                 0, 0, 0);
 
        return ret;
-} /* end of snic_reset */
-
-/*
- * SCSI Error handling calls driver's eh_host_reset if all prior
- * error handling levels return FAILED.
- *
- * Host Reset is the highest level of error recovery. If this fails, then
- * host is offlined by SCSI.
- */
-int
-snic_host_reset(struct scsi_cmnd *sc)
-{
-       struct Scsi_Host *shost = sc->device->host;
-
-       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,
-                     snic_cmd_tag(sc), CMD_FLAGS(sc));
-
-       return snic_reset(shost);
 } /* end of snic_host_reset */
 
 /*
diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c
index 9b20643..c8db82c 100644
--- a/drivers/scsi/stex.c
+++ b/drivers/scsi/stex.c
@@ -1441,14 +1441,13 @@ static int stex_do_reset(struct st_hba *hba)
        return -1;
 }
 
-static int stex_reset(struct scsi_cmnd *cmd)
+static int stex_reset(struct Scsi_Host *shost)
 {
        struct st_hba *hba;
 
-       hba = (struct st_hba *) &cmd->device->host->hostdata[0];
+       hba = (struct st_hba *) &shost->hostdata[0];
 
-       shost_printk(KERN_INFO, cmd->device->host,
-                    "resetting host\n");
+       shost_printk(KERN_INFO, shost, "resetting host\n");
 
        return stex_do_reset(hba) ? FAILED : SUCCESS;
 }
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 3cc8d67..b6a58b8 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -1437,9 +1437,9 @@ static int storvsc_get_chs(struct scsi_device *sdev, 
struct block_device * bdev,
        return 0;
 }
 
-static int storvsc_host_reset_handler(struct scsi_cmnd *scmnd)
+static int storvsc_host_reset_handler(struct Scsi_Host *shost)
 {
-       struct hv_host_device *host_dev = shost_priv(scmnd->device->host);
+       struct hv_host_device *host_dev = shost_priv(shost);
        struct hv_device *device = host_dev->dev;
 
        struct storvsc_device *stor_device;
diff --git a/drivers/scsi/sym53c416.c b/drivers/scsi/sym53c416.c
index 5bdcbe8..78c6bac 100644
--- a/drivers/scsi/sym53c416.c
+++ b/drivers/scsi/sym53c416.c
@@ -723,12 +723,9 @@ const char *sym53c416_info(struct Scsi_Host *SChost)
        int i;
        int base = SChost->io_port;
        int irq = SChost->irq;
-       int scsi_id = 0;
+       int scsi_id = SChost->this_id;
        int rev = inb(base + TC_HIGH);
 
-       for(i = 0; i < host_index; i++)
-               if(hosts[i].base == base)
-                       scsi_id = hosts[i].scsi_id;
        sprintf(info, "Symbios Logic 53c416 (rev. %d) at 0x%03x, irq %d, 
SCSI-ID %d, %s pio", rev, base, irq, scsi_id, (fastpio)? "fast" : "slow");
        return info;
 }
@@ -762,21 +759,18 @@ static int sym53c416_queuecommand_lck(Scsi_Cmnd *SCpnt, 
void (*done)(Scsi_Cmnd *
 
 DEF_SCSI_QCMD(sym53c416_queuecommand)
 
-static int sym53c416_host_reset(Scsi_Cmnd *SCpnt)
+static int sym53c416_host_reset(struct Scsi_Host *SChost)
 {
        int base;
-       int scsi_id = -1;       
+       int scsi_id;
        int i;
        unsigned long flags;
 
        spin_lock_irqsave(&sym53c416_lock, flags);
 
        /* printk("sym53c416_reset\n"); */
-       base = SCpnt->device->host->io_port;
-       /* search scsi_id - fixme, we shouldn't need to iterate for this! */
-       for(i = 0; i < host_index && scsi_id == -1; i++)
-               if(hosts[i].base == base)
-                       scsi_id = hosts[i].scsi_id;
+       base = SChost->io_port;
+       scsi_id = SChost->this_id;
        outb(RESET_CHIP, base + COMMAND_REG);
        outb(NOOP | PIO_MODE, base + COMMAND_REG);
        outb(RESET_SCSI_BUS, base + COMMAND_REG);
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c 
b/drivers/scsi/sym53c8xx_2/sym_glue.c
index 5055469..9861c45 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.c
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.c
@@ -687,9 +687,8 @@ static int sym53c8xx_eh_bus_reset_handler(struct scsi_cmnd 
*cmd)
        return SCSI_SUCCESS;
 }
 
-static int sym53c8xx_eh_host_reset_handler(struct scsi_cmnd *cmd)
+static int sym53c8xx_eh_host_reset_handler(struct Scsi_Host *shost)
 {
-       struct Scsi_Host *shost = cmd->device->host;
        struct sym_data *sym_data = shost_priv(shost);
        struct pci_dev *pdev = sym_data->pdev;
        struct sym_hcb *np = sym_data->ncb;
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 88ccd63..47a8722 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -214,7 +214,7 @@ enum {
 static void ufshcd_tmc_handler(struct ufs_hba *hba);
 static void ufshcd_async_scan(void *data, async_cookie_t cookie);
 static int ufshcd_reset_and_restore(struct ufs_hba *hba);
-static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd);
+static int ufshcd_eh_host_reset_handler(struct Scsi_Host *shost);
 static int ufshcd_clear_tm_cmd(struct ufs_hba *hba, int tag);
 static void ufshcd_hba_exit(struct ufs_hba *hba);
 static int ufshcd_probe_hba(struct ufs_hba *hba);
@@ -5585,7 +5585,7 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
         * handling stage: reset and restore.
         */
        if (lrbp->lun == UFS_UPIU_UFS_DEVICE_WLUN)
-               return ufshcd_eh_host_reset_handler(cmd);
+               return ufshcd_eh_host_reset_handler(host);
 
        ufshcd_hold(hba, false);
        reg = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
@@ -5791,13 +5791,13 @@ static int ufshcd_reset_and_restore(struct ufs_hba *hba)
  *
  * Returns SUCCESS/FAILED
  */
-static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd)
+static int ufshcd_eh_host_reset_handler(struct Scsi_Host *shost)
 {
        int err;
        unsigned long flags;
        struct ufs_hba *hba;
 
-       hba = shost_priv(cmd->device->host);
+       hba = shost_priv(shost);
 
        ufshcd_hold(hba, false);
        /*
diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c
index c374e3b..b99c58a 100644
--- a/drivers/scsi/vmw_pvscsi.c
+++ b/drivers/scsi/vmw_pvscsi.c
@@ -873,14 +873,13 @@ static void pvscsi_reset_all(struct pvscsi_adapter 
*adapter)
        }
 }
 
-static int pvscsi_host_reset(struct scsi_cmnd *cmd)
+static int pvscsi_host_reset(struct Scsi_Host *host)
 {
-       struct Scsi_Host *host = cmd->device->host;
        struct pvscsi_adapter *adapter = shost_priv(host);
        unsigned long flags;
        bool use_msg;
 
-       scmd_printk(KERN_INFO, cmd, "SCSI Host reset\n");
+       shost_printk(KERN_INFO, host, "SCSI Host reset\n");
 
        spin_lock_irqsave(&adapter->hw_lock, flags);
 
diff --git a/drivers/scsi/wd33c93.c b/drivers/scsi/wd33c93.c
index 74be04f..815c9a9 100644
--- a/drivers/scsi/wd33c93.c
+++ b/drivers/scsi/wd33c93.c
@@ -1571,13 +1571,11 @@
 }
 
 int
-wd33c93_host_reset(struct scsi_cmnd * SCpnt)
+wd33c93_host_reset(struct Scsi_Host * instance)
 {
-       struct Scsi_Host *instance;
        struct WD33C93_hostdata *hostdata;
        int i;
 
-       instance = SCpnt->device->host;
        spin_lock_irq(instance->host_lock);
        hostdata = (struct WD33C93_hostdata *) instance->hostdata;
 
diff --git a/drivers/scsi/wd33c93.h b/drivers/scsi/wd33c93.h
index 08abe50..4d2d3cb 100644
--- a/drivers/scsi/wd33c93.h
+++ b/drivers/scsi/wd33c93.h
@@ -347,6 +347,6 @@ void wd33c93_init (struct Scsi_Host *instance, const 
wd33c93_regs regs,
 void wd33c93_intr (struct Scsi_Host *instance);
 int wd33c93_show_info(struct seq_file *, struct Scsi_Host *);
 int wd33c93_write_info(struct Scsi_Host *, char *, int);
-int wd33c93_host_reset (struct scsi_cmnd *);
+int wd33c93_host_reset (struct Scsi_Host *);
 
 #endif /* WD33C93_H */
diff --git a/drivers/scsi/wd719x.c b/drivers/scsi/wd719x.c
index 2a9da2e..4c27913 100644
--- a/drivers/scsi/wd719x.c
+++ b/drivers/scsi/wd719x.c
@@ -510,9 +510,9 @@ static int wd719x_bus_reset(struct scsi_cmnd *cmd)
        return wd719x_reset(cmd, WD719X_CMD_BUSRESET, 0);
 }
 
-static int wd719x_host_reset(struct scsi_cmnd *cmd)
+static int wd719x_host_reset(struct Scsi_Host *host)
 {
-       struct wd719x *wd = shost_priv(cmd->device->host);
+       struct wd719x *wd = shost_priv(host);
        struct wd719x_scb *scb, *tmp;
        unsigned long flags;
        int result;
diff --git a/drivers/staging/unisys/visorhba/visorhba_main.c 
b/drivers/staging/unisys/visorhba/visorhba_main.c
index 811abfc..c58bf09 100644
--- a/drivers/staging/unisys/visorhba/visorhba_main.c
+++ b/drivers/staging/unisys/visorhba/visorhba_main.c
@@ -437,13 +437,13 @@ static int visorhba_bus_reset_handler(struct scsi_cmnd 
*scsicmd)
 
 /*
  *     visorhba_host_reset_handler - Not supported
- *     @scsicmd: The scsicmd that needs aborted
+ *     @shost: The scsi host that needs resetting
  *
  *     Not supported, return SUCCESS
  *     Returns SUCCESS
  */
 static int
-visorhba_host_reset_handler(struct scsi_cmnd *scsicmd)
+visorhba_host_reset_handler(struct Scsi_Host *shost)
 {
        /* issue TASK_MGMT_TARGET_RESET for each target on each bus for host */
        return SUCCESS;
diff --git a/drivers/usb/image/microtek.c b/drivers/usb/image/microtek.c
index a4dbb0c..178d39c 100644
--- a/drivers/usb/image/microtek.c
+++ b/drivers/usb/image/microtek.c
@@ -344,9 +344,9 @@ static int mts_scsi_abort(struct scsi_cmnd *srb)
        return FAILED;
 }
 
-static int mts_scsi_host_reset(struct scsi_cmnd *srb)
+static int mts_scsi_host_reset(struct Scsi_Host *shost)
 {
-       struct mts_desc* desc = (struct 
mts_desc*)(srb->device->host->hostdata[0]);
+       struct mts_desc* desc = (struct mts_desc*)(shost->hostdata[0]);
        int result;
 
        MTS_DEBUG_GOT_HERE();
diff --git a/include/scsi/libfc.h b/include/scsi/libfc.h
index 2109844..fe4789d 100644
--- a/include/scsi/libfc.h
+++ b/include/scsi/libfc.h
@@ -953,7 +953,7 @@ static inline struct fc_lport *fc_disc_lport(struct fc_disc 
*disc)
 int fc_queuecommand(struct Scsi_Host *, struct scsi_cmnd *);
 int fc_eh_abort(struct scsi_cmnd *);
 int fc_eh_device_reset(struct scsi_cmnd *);
-int fc_eh_host_reset(struct scsi_cmnd *);
+int fc_eh_host_reset(struct Scsi_Host *);
 int fc_slave_alloc(struct scsi_device *);
 
 /*
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index afb0481..b85f8a5 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -148,7 +148,7 @@ struct scsi_host_template {
        int (* eh_device_reset_handler)(struct scsi_cmnd *);
        int (* eh_target_reset_handler)(struct scsi_cmnd *);
        int (* eh_bus_reset_handler)(struct scsi_cmnd *);
-       int (* eh_host_reset_handler)(struct scsi_cmnd *);
+       int (* eh_host_reset_handler)(struct Scsi_Host *);
 
        /*
         * Before the mid layer attempts to scan for a new device where none
-- 
1.8.5.6

Reply via email to