Message ID | 20220502215953.5463-3-hare@suse.de (mailing list archive) |
---|---|
State | Deferred |
Headers | show |
Series | [1/7] scsi: Use Scsi_Host as argument for eh_host_reset_handler | expand |
On 5/2/22 14:59, Hannes Reinecke wrote: > 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 <hare@suse.de> > Reviewed-by: Bart Van Assche <bvanassche@acm.org> > --- > Documentation/scsi/scsi_eh.rst | 2 +- > Documentation/scsi/scsi_mid_low_api.rst | 4 +- > drivers/infiniband/ulp/srp/ib_srp.c | 6 +-- > drivers/message/fusion/mptscsih.c | 19 +++++---- > 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 | 3 +- > drivers/scsi/aacraid/linit.c | 6 +-- > drivers/scsi/advansys.c | 26 +++++++------ > drivers/scsi/aha1542.c | 20 +++++----- > drivers/scsi/arm/acornscsi.c | 8 ++-- > drivers/scsi/arm/fas216.c | 4 +- > drivers/scsi/arm/fas216.h | 6 +-- > drivers/scsi/atari_scsi.c | 4 +- > drivers/scsi/cxlflash/main.c | 5 +-- > drivers/scsi/dpt_i2o.c | 14 +++---- > drivers/scsi/dpti.h | 2 +- > drivers/scsi/esas2r/esas2r.h | 2 +- > drivers/scsi/esas2r/esas2r_main.c | 16 ++++---- > drivers/scsi/esp_scsi.c | 4 +- > drivers/scsi/fdomain.c | 3 +- > 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 | 4 +- > drivers/scsi/ipr.c | 4 +- > drivers/scsi/ips.c | 22 ++++------- > 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 | 34 ++++++++-------- > drivers/scsi/mesh.c | 10 ++--- > drivers/scsi/mpi3mr/mpi3mr_os.c | 12 +++--- > drivers/scsi/mpt3sas/mpt3sas_scsih.c | 11 +++--- > drivers/scsi/mvumi.c | 7 ++-- > drivers/scsi/myrb.c | 3 +- > drivers/scsi/myrs.c | 3 +- > drivers/scsi/nsp32.c | 12 +++--- > drivers/scsi/pcmcia/nsp_cs.c | 4 +- > drivers/scsi/pcmcia/nsp_cs.h | 2 +- > drivers/scsi/pcmcia/qlogic_stub.c | 4 +- > drivers/scsi/pcmcia/sym53c500_cs.c | 8 ++-- > drivers/scsi/pmcraid.c | 6 +-- > drivers/scsi/ppa.c | 4 +- > 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 | 18 +++------ > drivers/scsi/qla4xxx/ql4_os.c | 18 ++++----- > drivers/scsi/qlogicfas408.c | 10 ++--- > drivers/scsi/qlogicfas408.h | 2 +- > drivers/scsi/qlogicpti.c | 3 +- > drivers/scsi/scsi_debug.c | 8 ++-- > drivers/scsi/scsi_error.c | 2 +- > drivers/scsi/snic/snic.h | 3 +- > drivers/scsi/snic/snic_scsi.c | 37 ++++-------------- > drivers/scsi/stex.c | 7 ++-- > drivers/scsi/storvsc_drv.c | 4 +- > drivers/scsi/sym53c8xx_2/sym_glue.c | 3 +- > drivers/scsi/ufs/ufshcd.c | 6 +-- > drivers/scsi/vmw_pvscsi.c | 5 +-- > drivers/scsi/wd33c93.c | 5 +-- > drivers/scsi/wd33c93.h | 2 +- > drivers/scsi/wd719x.c | 4 +- > .../staging/unisys/visorhba/visorhba_main.c | 4 +- > drivers/usb/image/microtek.c | 4 +- > include/scsi/libfc.h | 2 +- > include/scsi/scsi_host.h | 2 +- > 78 files changed, 269 insertions(+), 340 deletions(-) > > diff --git a/Documentation/scsi/scsi_eh.rst b/Documentation/scsi/scsi_eh.rst > index 885395dc1f15..12113cca5ad9 100644 > --- a/Documentation/scsi/scsi_eh.rst > +++ b/Documentation/scsi/scsi_eh.rst > @@ -215,7 +215,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.rst b/Documentation/scsi/scsi_mid_low_api.rst > index 63ddea2b9640..784587ea7eee 100644 > --- a/Documentation/scsi/scsi_mid_low_api.rst > +++ b/Documentation/scsi/scsi_mid_low_api.rst > @@ -777,7 +777,7 @@ Details:: > > /** > * eh_host_reset_handler - reset host (host bus adapter) > - * @scp: SCSI host that contains this device should be reset > + * @shp: SCSI host that contains this device should be reset > * > * Returns SUCCESS if command aborted else FAILED > * > @@ -794,7 +794,7 @@ Details:: > * > * Optionally defined in: LLD > **/ > - int eh_host_reset_handler(struct scsi_cmnd * scp) > + int eh_host_reset_handler(struct Scsi_Host * shp) > > > /** > diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c > index 285b766e4e70..de901dee6935 100644 > --- a/drivers/infiniband/ulp/srp/ib_srp.c > +++ b/drivers/infiniband/ulp/srp/ib_srp.c > @@ -2842,11 +2842,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 ed21cc4d2c77..3df07e024026 100644 > --- a/drivers/message/fusion/mptscsih.c > +++ b/drivers/message/fusion/mptscsih.c > @@ -1956,15 +1956,15 @@ mptscsih_bus_reset(struct scsi_cmnd * SCpnt) > > /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ > /** > - * 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; > @@ -1972,9 +1972,8 @@ mptscsih_host_reset(struct scsi_cmnd *SCpnt) > 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; > } > > @@ -1982,8 +1981,8 @@ mptscsih_host_reset(struct scsi_cmnd *SCpnt) > 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. > @@ -1994,8 +1993,8 @@ mptscsih_host_reset(struct scsi_cmnd *SCpnt) > 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 e3d92c392673..0faefe9c7541 100644 > --- a/drivers/message/fusion/mptscsih.h > +++ b/drivers/message/fusion/mptscsih.h > @@ -122,7 +122,7 @@ extern int mptscsih_abort(struct scsi_cmnd * SCpnt); > extern int mptscsih_dev_reset(struct scsi_cmnd * SCpnt); > extern int mptscsih_target_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 fb2b73fca381..873ccc60e4d6 100644 > --- a/drivers/s390/scsi/zfcp_scsi.c > +++ b/drivers/s390/scsi/zfcp_scsi.c > @@ -371,9 +371,8 @@ static int zfcp_scsi_eh_target_reset_handler(struct scsi_cmnd *scpnt) > return ret; > } > > -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 = SUCCESS; > unsigned long flags; > diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c > index cd823ff5deab..61af5c5eaccb 100644 > --- a/drivers/scsi/3w-9xxx.c > +++ b/drivers/scsi/3w-9xxx.c > @@ -1717,18 +1717,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 3ebe66151dcb..c4d1ebf15700 100644 > --- a/drivers/scsi/3w-sas.c > +++ b/drivers/scsi/3w-sas.c > @@ -1423,18 +1423,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 a853c5497af6..8c5f37563515 100644 > --- a/drivers/scsi/3w-xxxx.c > +++ b/drivers/scsi/3w-xxxx.c > @@ -1366,25 +1366,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 e1e4f9d10887..6a44a0795bb5 100644 > --- a/drivers/scsi/53c700.c > +++ b/drivers/scsi/53c700.c > @@ -155,7 +155,7 @@ MODULE_LICENSE("GPL"); > > 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); > @@ -1934,40 +1934,41 @@ NCR_700_abort(struct scsi_cmnd * SCp) > } > > 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 a897c8f914cf..62c3aa7570ab 100644 > --- a/drivers/scsi/BusLogic.c > +++ b/drivers/scsi/BusLogic.c > @@ -2843,21 +2843,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 dece7d9eb4d3..6704415fb1c2 100644 > --- a/drivers/scsi/NCR5380.c > +++ b/drivers/scsi/NCR5380.c > @@ -2379,9 +2379,8 @@ static void bus_reset_cleanup(struct Scsi_Host *instance) > * 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); > unsigned long flags; > struct NCR5380_cmd *ncmd; > diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c > index 9c27bc37e5de..19a012c9a3c9 100644 > --- a/drivers/scsi/aacraid/linit.c > +++ b/drivers/scsi/aacraid/linit.c > @@ -1078,13 +1078,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 > * > */ > -static int aac_eh_host_reset(struct scsi_cmnd *cmd) > +static 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 f301aec044bb..0b7fcf7f9624 100644 > --- a/drivers/scsi/advansys.c > +++ b/drivers/scsi/advansys.c > @@ -7016,9 +7016,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; > @@ -7028,7 +7027,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; > @@ -7039,16 +7038,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"); > @@ -7065,12 +7066,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/aha1542.c b/drivers/scsi/aha1542.c > index cf7bba2ca68d..69063fe4aab8 100644 > --- a/drivers/scsi/aha1542.c > +++ b/drivers/scsi/aha1542.c > @@ -913,15 +913,14 @@ static int aha1542_dev_reset(struct scsi_cmnd *cmd) > aha1542_outb(sh->io_port, CMD_START_SCSI); > spin_unlock_irqrestore(sh->host_lock, flags); > > - scmd_printk(KERN_WARNING, cmd, > + sdev_printk(KERN_WARNING, sdev, > "Trying device reset for target\n"); > > 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; > @@ -933,9 +932,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; > @@ -946,7 +945,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, > @@ -954,7 +953,8 @@ 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", > + sh->host_no); > > for (i = 0; i < AHA1542_MAILBOXES; i++) { > if (aha1542->int_cmds[i] != NULL) { > @@ -982,12 +982,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/acornscsi.c b/drivers/scsi/arm/acornscsi.c > index 7602639da9b3..3fc9326fc4c0 100644 > --- a/drivers/scsi/arm/acornscsi.c > +++ b/drivers/scsi/arm/acornscsi.c > @@ -2631,13 +2631,13 @@ int acornscsi_abort(struct scsi_cmnd *SCpnt) > /* > * Prototype: int acornscsi_reset(struct scsi_cmnd *SCpnt) > * Purpose : reset a command on this host/reset this host > - * Params : SCpnt - command causing reset > + * Params : shost - host to be reset > * Returns : one of SCSI_RESET_ macros > */ > -int acornscsi_host_reset(struct scsi_cmnd *SCpnt) > +int acornscsi_host_reset(struct Scsi_Host *shost) > { > - AS_Host *host = (AS_Host *)SCpnt->device->host->hostdata; > - struct scsi_cmnd *SCptr; > + AS_Host *host = (AS_Host *)shost->hostdata; > + struct scsi_cmnd *SCptr; > > host->stats.resets += 1; > > diff --git a/drivers/scsi/arm/fas216.c b/drivers/scsi/arm/fas216.c > index e6289c6af5ef..38eec967155d 100644 > --- a/drivers/scsi/arm/fas216.c > +++ b/drivers/scsi/arm/fas216.c > @@ -2656,9 +2656,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 08113277a2a9..f17583f143b3 100644 > --- a/drivers/scsi/arm/fas216.h > +++ b/drivers/scsi/arm/fas216.h > @@ -394,11 +394,11 @@ extern int fas216_eh_device_reset(struct scsi_cmnd *SCpnt); > */ > 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 d401cf27113a..d967141f366c 100644 > --- a/drivers/scsi/atari_scsi.c > +++ b/drivers/scsi/atari_scsi.c > @@ -667,7 +667,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; > @@ -684,7 +684,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 e7be95ee7d64..50c04ba85b0b 100644 > --- a/drivers/scsi/cxlflash/main.c > +++ b/drivers/scsi/cxlflash/main.c > @@ -2476,7 +2476,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 > @@ -2487,11 +2487,10 @@ 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; > > diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c > index 93227c04ef59..6e3ad0e5b533 100644 > --- a/drivers/scsi/dpt_i2o.c > +++ b/drivers/scsi/dpt_i2o.c > @@ -746,15 +746,15 @@ 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; > char name[32]; > > - pHba = (adpt_hba*)cmd->device->host->hostdata[0]; > + pHba = (adpt_hba*)shost->hostdata[0]; > strncpy(name, pHba->name, sizeof(name)); > - printk(KERN_WARNING"%s: Hba Reset: scsi id %d: tid: %d\n", name, cmd->device->channel, pHba->channel[cmd->device->channel].tid); > + printk(KERN_WARNING"%s: Hba Reset\n", name); > rcode = adpt_hba_reset(pHba); > if(rcode == 0){ > printk(KERN_WARNING"%s: HBA reset complete\n", name); > @@ -765,13 +765,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 8a079e8d7f65..b77a3625fa6f 100644 > --- a/drivers/scsi/dpti.h > +++ b/drivers/scsi/dpti.h > @@ -28,7 +28,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_slave_configure(struct scsi_device *); > > static const char *adpt_info(struct Scsi_Host *pSHost); > diff --git a/drivers/scsi/esas2r/esas2r.h b/drivers/scsi/esas2r/esas2r.h > index ed63f7a9ea54..a104d1a3a9da 100644 > --- a/drivers/scsi/esas2r/esas2r.h > +++ b/drivers/scsi/esas2r/esas2r.h > @@ -976,7 +976,7 @@ long esas2r_proc_ioctl(struct file *fp, unsigned int cmd, unsigned long arg); > /* 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 7a4eadad23d7..52494c8bb656 100644 > --- a/drivers/scsi/esas2r/esas2r_main.c > +++ b/drivers/scsi/esas2r/esas2r_main.c > @@ -1059,10 +1059,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; > @@ -1087,18 +1087,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 64ec6bb84550..b41eac8b5e0f 100644 > --- a/drivers/scsi/esp_scsi.c > +++ b/drivers/scsi/esp_scsi.c > @@ -2640,9 +2640,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 444eac9b2466..5d3f1520ee50 100644 > --- a/drivers/scsi/fdomain.c > +++ b/drivers/scsi/fdomain.c > @@ -456,9 +456,8 @@ static int fdomain_abort(struct scsi_cmnd *cmd) > return SUCCESS; > } > > -static int fdomain_host_reset(struct scsi_cmnd *cmd) > +static int fdomain_host_reset(struct Scsi_Host *sh) > { > - struct Scsi_Host *sh = cmd->device->host; > struct fdomain *fd = shost_priv(sh); > unsigned long flags; > > diff --git a/drivers/scsi/fnic/fnic.h b/drivers/scsi/fnic/fnic.h > index aa07189fb5fb..7b81bea3ffa2 100644 > --- a/drivers/scsi/fnic/fnic.h > +++ b/drivers/scsi/fnic/fnic.h > @@ -359,7 +359,7 @@ void fnic_update_mac_locked(struct fnic *, u8 *new); > 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 fb6dc59a5a7e..b286d5feaca1 100644 > --- a/drivers/scsi/fnic/fnic_scsi.c > +++ b/drivers/scsi/fnic/fnic_scsi.c > @@ -2452,11 +2452,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 f18b770626e6..30f6a6891ea2 100644 > --- a/drivers/scsi/hptiop.c > +++ b/drivers/scsi/hptiop.c > @@ -1091,12 +1091,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 2e7128f0d905..5fb36cd70dde 100644 > --- a/drivers/scsi/ibmvscsi/ibmvfc.c > +++ b/drivers/scsi/ibmvscsi/ibmvfc.c > @@ -2984,10 +2984,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 63f32f843e75..892d79e2e7e1 100644 > --- a/drivers/scsi/ibmvscsi/ibmvscsi.c > +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c > @@ -1735,10 +1735,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 7a499d621c25..757175d09b2b 100644 > --- a/drivers/scsi/imm.c > +++ b/drivers/scsi/imm.c > @@ -984,9 +984,9 @@ 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 *host) > { > - imm_struct *dev = imm_dev(cmd->device->host); > + imm_struct *dev = imm_dev(host); > > if (imm_scsi_pointer(cmd)->phase) > imm_disconnect(dev); > diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c > index 104bee9b3a9d..29893dae7f24 100644 > --- a/drivers/scsi/ipr.c > +++ b/drivers/scsi/ipr.c > @@ -5181,14 +5181,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 d49c1d6df5d6..f57858f561e3 100644 > --- a/drivers/scsi/ips.c > +++ b/drivers/scsi/ips.c > @@ -229,7 +229,7 @@ module_param(ips, charp, 0); > * Function prototypes > */ > 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 *); > @@ -829,7 +829,7 @@ 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; > @@ -842,13 +842,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"); > @@ -994,13 +988,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; > } > @@ -1078,7 +1072,7 @@ static int ips_queue_lck(struct scsi_cmnd *SC) > 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; > scsi_done(SC); > return (0); > diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c > index 074996319df5..ab4a1c01a353 100644 > --- a/drivers/scsi/libfc/fc_fcp.c > +++ b/drivers/scsi/libfc/fc_fcp.c > @@ -2195,11 +2195,10 @@ EXPORT_SYMBOL(fc_eh_device_reset); > > /** > * 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 1959c58d22f8..0443846c9fad 100644 > --- a/drivers/scsi/lpfc/lpfc_scsi.c > +++ b/drivers/scsi/lpfc/lpfc_scsi.c > @@ -6503,9 +6503,8 @@ lpfc_target_reset_handler(struct scsi_cmnd *cmnd) > * 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 070ebe352f9e..466efe781376 100644 > --- a/drivers/scsi/mac53c94.c > +++ b/drivers/scsi/mac53c94.c > @@ -100,14 +100,14 @@ static int mac53c94_queue_lck(struct scsi_cmnd *cmd) > > 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, ®s->command); /* assert RST */ > @@ -117,7 +117,7 @@ static int mac53c94_host_reset(struct scsi_cmnd *cmd) > mac53c94_init(state); > writeb(CMD_NOP, ®s->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 9484632ffed6..6f6b66715707 100644 > --- a/drivers/scsi/megaraid.c > +++ b/drivers/scsi/megaraid.c > @@ -1875,13 +1875,13 @@ megaraid_abort(struct scsi_cmnd *cmd) > > > 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 013fbfb911b9..43acad67d95f 100644 > --- a/drivers/scsi/megaraid.h > +++ b/drivers/scsi/megaraid.h > @@ -973,7 +973,7 @@ static irqreturn_t megaraid_isr_iomapped(int, void *); > static void mega_free_scb(adapter_t *, scb_t *); > > static int megaraid_abort(struct scsi_cmnd *); > -static int megaraid_reset(struct scsi_cmnd *); > +static int megaraid_reset(struct Scsi_Host *); > static int megaraid_abort_and_reset(adapter_t *, struct 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 2a339d4a7e9d..e250566a17b6 100644 > --- a/drivers/scsi/megaraid/megaraid_mbox.c > +++ b/drivers/scsi/megaraid/megaraid_mbox.c > @@ -92,7 +92,7 @@ static int megaraid_sysfs_alloc_resources(adapter_t *); > 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 []); > @@ -2512,7 +2512,7 @@ megaraid_abort_handler(struct scsi_cmnd *scp) > * host. > **/ > static int > -megaraid_reset_handler(struct scsi_cmnd *scp) > +megaraid_reset_handler(struct Scsi_Host *shost) > { > adapter_t *adapter; > scb_t *scb; > @@ -2525,7 +2525,7 @@ megaraid_reset_handler(struct scsi_cmnd *scp) > int i; > uioc_t *kioc; > > - adapter = SCP2ADAPTER(scp); > + adapter = (adapter_t *)SCSIHOST2ADAP(shost); > raid_dev = ADAP2RAIDDEV(adapter); > > // return failure if adapter is not responding > @@ -2556,15 +2556,9 @@ megaraid_reset_handler(struct scsi_cmnd *scp) > > 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); > scsi_done(scb->scp); > diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c > index c95360a3c186..0222e234f108 100644 > --- a/drivers/scsi/megaraid/megaraid_sas_base.c > +++ b/drivers/scsi/megaraid/megaraid_sas_base.c > @@ -2896,15 +2896,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"); > @@ -3057,31 +3056,30 @@ megasas_dump_sys_regs(void __iomem *reg_set, char *buf) > * megasas_reset_bus_host - Bus & host reset handler entry point > * @scmd: Mid-layer SCSI command > */ > -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, > "OCR is requested due to IO timeout!!\n"); > > - scmd_printk(KERN_INFO, scmd, > - "SCSI host state: %d SCSI host busy: %d FW outstanding: %d\n", > - scmd->device->host->shost_state, > - scsi_host_busy(scmd->device->host), > + shost_printk(KERN_INFO, shost, > + "Controller reset is requested due to IO timeout\n" > + "SCSI host state: %d\t" > + " SCSI host busy: %d\t FW outstanding: %d\n", > + shost->shost_state, > + scsi_host_busy(shost), > atomic_read(&instance->fw_outstanding)); > /* > * First wait for all commands to complete > */ > - if (instance->adapter_type == MFI_SERIES) { > - ret = megasas_generic_reset(scmd); > - } else { > - megasas_dump_fusion_io(scmd); > - ret = megasas_reset_fusion(scmd->device->host, > - SCSIIO_TIMEOUT_OCR); > - } > + if (instance->adapter_type == MFI_SERIES) > + ret = megasas_generic_reset(shost); > + else > + ret = megasas_reset_fusion(shost, SCSIIO_TIMEOUT_OCR); > > return ret; > } > diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c > index 322d3ad38159..5e1d0bde36f3 100644 > --- a/drivers/scsi/mesh.c > +++ b/drivers/scsi/mesh.c > @@ -1699,9 +1699,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; > @@ -1718,7 +1718,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); > @@ -1727,13 +1727,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/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c > index 31f05e9f5ee0..bd42d3a56590 100644 > --- a/drivers/scsi/mpi3mr/mpi3mr_os.c > +++ b/drivers/scsi/mpi3mr/mpi3mr_os.c > @@ -3335,15 +3335,15 @@ void mpi3mr_wait_for_host_io(struct mpi3mr_ioc *mrioc, u32 timeout) > > /** > * mpi3mr_eh_host_reset - Host reset error handling callback > - * @scmd: SCSI command reference > + * @shost: SCSI host reference > * > * Issue controller reset > * > * Return: SUCCESS of successful reset else FAILED > */ > -static int mpi3mr_eh_host_reset(struct scsi_cmnd *scmd) > +static int mpi3mr_eh_host_reset(struct Scsi_Host *shost) > { > - struct mpi3mr_ioc *mrioc = shost_priv(scmd->device->host); > + struct mpi3mr_ioc *mrioc = shost_priv(shost); > int retval = FAILED, ret; > > ret = mpi3mr_soft_reset_handler(mrioc, > @@ -3353,9 +3353,9 @@ static int mpi3mr_eh_host_reset(struct scsi_cmnd *scmd) > > retval = SUCCESS; > out: > - sdev_printk(KERN_INFO, scmd->device, > - "Host reset is %s for scmd(%p)\n", > - ((retval == SUCCESS) ? "SUCCESS" : "FAILED"), scmd); > + shost_printk(KERN_INFO, shost, > + "Host reset is %s\n", > + ((retval == SUCCESS) ? "SUCCESS" : "FAILED")); > > return retval; > } > diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c > index 7e476f50935b..ea9a8799f89a 100644 > --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c > +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c > @@ -3526,13 +3526,12 @@ scsih_target_reset(struct scsi_cmnd *scmd) > * Return: 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; > > - ioc_info(ioc, "attempting host reset! scmd(0x%p)\n", scmd); > - scsi_print_command(scmd); > + ioc_info(ioc, "attempting host reset\n"); > > if (ioc->is_driver_loading || ioc->remove_host) { > ioc_info(ioc, "Blocking the host reset\n"); > @@ -3543,8 +3542,8 @@ scsih_host_reset(struct scsi_cmnd *scmd) > retval = mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); > r = (retval < 0) ? FAILED : SUCCESS; > out: > - ioc_info(ioc, "host reset: %s scmd(0x%p)\n", > - r == SUCCESS ? "SUCCESS" : "FAILED", scmd); > + ioc_info(ioc, "host reset: %s\n", > + r == SUCCESS ? "SUCCESS" : "FAILED"); > > return r; > } > diff --git a/drivers/scsi/mvumi.c b/drivers/scsi/mvumi.c > index 05d3ce9b72db..249813bc926e 100644 > --- a/drivers/scsi/mvumi.c > +++ b/drivers/scsi/mvumi.c > @@ -695,14 +695,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 -%u cmd=%x retries=%x\n", > - scsi_cmd_to_rq(scmd)->tag, scmd->cmnd[0], scmd->retries); > + shost_printk(KERN_NOTICE, shost, "RESET\n"); > > return mhba->instancet->reset_host(mhba); > } > diff --git a/drivers/scsi/myrb.c b/drivers/scsi/myrb.c > index 71585528e8db..437b11d48238 100644 > --- a/drivers/scsi/myrb.c > +++ b/drivers/scsi/myrb.c > @@ -1251,9 +1251,8 @@ static void myrb_cleanup(struct myrb_hba *cb) > scsi_host_put(cb->host); > } > > -static int myrb_host_reset(struct scsi_cmnd *scmd) > +static int myrb_host_reset(struct Scsi_Host *shost) > { > - struct Scsi_Host *shost = scmd->device->host; > struct myrb_hba *cb = shost_priv(shost); > > cb->reset(cb->io_base); > diff --git a/drivers/scsi/myrs.c b/drivers/scsi/myrs.c > index 7eb8c39da366..caa5511ca923 100644 > --- a/drivers/scsi/myrs.c > +++ b/drivers/scsi/myrs.c > @@ -1529,9 +1529,8 @@ ATTRIBUTE_GROUPS(myrs_shost); > /* > * SCSI midlayer interface > */ > -static int myrs_host_reset(struct scsi_cmnd *scmd) > +static int myrs_host_reset(struct Scsi_Host *shost) > { > - struct Scsi_Host *shost = scmd->device->host; > struct myrs_hba *cs = shost_priv(shost); > > cs->reset(cs->io_base); > diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c > index 75bb0028ed74..d1f760c8e8ce 100644 > --- a/drivers/scsi/nsp32.c > +++ b/drivers/scsi/nsp32.c > @@ -191,7 +191,7 @@ static int nsp32_release (struct Scsi_Host *); > > /* SCSI error handler */ > static int nsp32_eh_abort (struct scsi_cmnd *); > -static int nsp32_eh_host_reset(struct scsi_cmnd *); > +static int nsp32_eh_host_reset(struct Scsi_Host *); > > /* generate SCSI message */ > static void nsp32_build_identify(struct scsi_cmnd *); > @@ -2876,23 +2876,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); > > - 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/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c > index 48acab03a8a0..4aa9737fa711 100644 > --- a/drivers/scsi/pcmcia/nsp_cs.c > +++ b/drivers/scsi/pcmcia/nsp_cs.c > @@ -1497,9 +1497,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/nsp_cs.h b/drivers/scsi/pcmcia/nsp_cs.h > index e1ee8ef90ad3..f532adb5f166 100644 > --- a/drivers/scsi/pcmcia/nsp_cs.h > +++ b/drivers/scsi/pcmcia/nsp_cs.h > @@ -300,7 +300,7 @@ static int nsp_queuecommand(struct Scsi_Host *h, struct scsi_cmnd *SCpnt); > /*static int nsp_eh_abort (struct scsi_cmnd *SCpnt);*/ > /*static int nsp_eh_device_reset(struct scsi_cmnd *SCpnt);*/ > static int nsp_eh_bus_reset (struct scsi_cmnd *SCpnt); > -static int nsp_eh_host_reset (struct scsi_cmnd *SCpnt); > +static int nsp_eh_host_reset (struct Scsi_Host *host); > static int nsp_bus_reset (nsp_hw_data *data); > > /* */ > diff --git a/drivers/scsi/pcmcia/qlogic_stub.c b/drivers/scsi/pcmcia/qlogic_stub.c > index 310d0b6586a6..59893db166c9 100644 > --- a/drivers/scsi/pcmcia/qlogic_stub.c > +++ b/drivers/scsi/pcmcia/qlogic_stub.c > @@ -270,8 +270,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 5d7dfefd6f6c..79862f17de8d 100644 > --- a/drivers/scsi/pcmcia/sym53c500_cs.c > +++ b/drivers/scsi/pcmcia/sym53c500_cs.c > @@ -583,14 +583,14 @@ static int SYM53C500_queue_lck(struct scsi_cmnd *SCpnt) > 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 62b9de87ff05..79ca737ac75b 100644 > --- a/drivers/scsi/pmcraid.c > +++ b/drivers/scsi/pmcraid.c > @@ -3086,19 +3086,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 c6c1bc608224..14a4b582fa9e 100644 > --- a/drivers/scsi/ppa.c > +++ b/drivers/scsi/ppa.c > @@ -867,9 +867,9 @@ 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 *host) > { > - ppa_struct *dev = ppa_dev(cmd->device->host); > + ppa_struct *dev = ppa_dev(host); > > if (ppa_scsi_pointer(cmd)->phase) > ppa_disconnect(dev); > diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c > index 85ccfbc5cd26..c12fb3465946 100644 > --- a/drivers/scsi/qedf/qedf_main.c > +++ b/drivers/scsi/qedf/qedf_main.c > @@ -952,12 +952,12 @@ 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 31ec429104e2..dfb12f80fd9f 100644 > --- a/drivers/scsi/qedi/qedi_iscsi.c > +++ b/drivers/scsi/qedi/qedi_iscsi.c > @@ -30,9 +30,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 c4466e4e692f..cd4c7126c1c9 100644 > --- a/drivers/scsi/qla1280.c > +++ b/drivers/scsi/qla1280.c > @@ -995,10 +995,9 @@ qla1280_eh_bus_reset(struct scsi_cmnd *cmd) > * 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 762229d495a8..5f86e7bd5a0e 100644 > --- a/drivers/scsi/qla2xxx/qla_os.c > +++ b/drivers/scsi/qla2xxx/qla_os.c > @@ -1604,8 +1604,7 @@ qla2xxx_eh_bus_reset(struct scsi_cmnd *cmd) > * 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. > @@ -1613,13 +1612,11 @@ qla2xxx_eh_bus_reset(struct scsi_cmnd *cmd) > * 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)) { > @@ -1629,11 +1626,8 @@ qla2xxx_eh_host_reset(struct scsi_cmnd *cmd) > 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 > @@ -1679,8 +1673,8 @@ qla2xxx_eh_host_reset(struct scsi_cmnd *cmd) > > 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 f4969b99c07f..8f89080e2580 100644 > --- a/drivers/scsi/qla4xxx/ql4_os.c > +++ b/drivers/scsi/qla4xxx/ql4_os.c > @@ -159,7 +159,7 @@ static int qla4xxx_queuecommand(struct Scsi_Host *h, struct scsi_cmnd *cmd); > 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); > @@ -9411,18 +9411,18 @@ 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; > int rval; > > - ha = to_qla_host(cmd->device->host); > + ha = to_qla_host(host); > > rval = qla4xxx_isp_check_reg(ha); > if (rval != QLA_SUCCESS) { > @@ -9444,20 +9444,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 3e065d5fc80c..008e908e3aff 100644 > --- a/drivers/scsi/qlogicfas408.c > +++ b/drivers/scsi/qlogicfas408.c > @@ -525,20 +525,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 a971db11d293..c1b6e9fea9ce 100644 > --- a/drivers/scsi/qlogicfas408.h > +++ b/drivers/scsi/qlogicfas408.h > @@ -109,7 +109,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/qlogicpti.c b/drivers/scsi/qlogicpti.c > index 57f2f4135a06..bd3defa15933 100644 > --- a/drivers/scsi/qlogicpti.c > +++ b/drivers/scsi/qlogicpti.c > @@ -1260,10 +1260,9 @@ static int qlogicpti_abort(struct scsi_cmnd *Cmnd) > return return_status; > } > > -static int qlogicpti_reset(struct scsi_cmnd *Cmnd) > +static int qlogicpti_reset(struct Scsi_Host *host) > { > u_short param[6]; > - struct Scsi_Host *host = Cmnd->device->host; > struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; > int return_status = SUCCESS; > > diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c > index 592a290e6cfa..6292ac7aef7a 100644 > --- a/drivers/scsi/scsi_debug.c > +++ b/drivers/scsi/scsi_debug.c > @@ -5357,15 +5357,15 @@ 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__); > + 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, > @@ -5377,7 +5377,7 @@ static int scsi_debug_host_reset(struct scsi_cmnd *SCpnt) > 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 cdaca13ac1f1..747131ca8970 100644 > --- a/drivers/scsi/scsi_error.c > +++ b/drivers/scsi/scsi_error.c > @@ -841,7 +841,7 @@ static enum scsi_disposition 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 e40492d36031..79916e803b26 100644 > --- a/drivers/scsi/snic/snic.h > +++ b/drivers/scsi/snic/snic.h > @@ -380,8 +380,7 @@ extern const struct attribute_group *snic_host_groups[]; > 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 635656ccf30a..3722383fb529 100644 > --- a/drivers/scsi/snic/snic_scsi.c > +++ b/drivers/scsi/snic/snic_scsi.c > @@ -2295,8 +2295,15 @@ snic_issue_hba_reset(struct snic *snic, struct scsi_cmnd *sc) > 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; > @@ -2360,34 +2367,6 @@ snic_reset(struct Scsi_Host *shost) > (ulong) sc, jiffies_to_msecs(jiffies - start_time), > 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; > - u32 start_time = jiffies; > - int ret; > - > - SNIC_SCSI_DBG(shost, > - "host reset:sc %p sc_cmd 0x%x req %p tag %d flags 0x%llx\n", > - sc, sc->cmnd[0], scsi_cmd_to_rq(sc), > - snic_cmd_tag(sc), CMD_FLAGS(sc)); > - > - ret = snic_reset(shost); > - > - SNIC_TRC(shost->host_no, snic_cmd_tag(sc), (ulong) sc, > - jiffies_to_msecs(jiffies - start_time), > - 0, SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); > - > return ret; > } /* end of snic_host_reset */ > > diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c > index e6420f2127ce..d6f7e3f541e2 100644 > --- a/drivers/scsi/stex.c > +++ b/drivers/scsi/stex.c > @@ -1433,14 +1433,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 9a0bba5a51a7..70bc095c6e78 100644 > --- a/drivers/scsi/storvsc_drv.c > +++ b/drivers/scsi/storvsc_drv.c > @@ -1659,9 +1659,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/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c > index cb8885eb5a5b..a573baa5bdf2 100644 > --- a/drivers/scsi/sym53c8xx_2/sym_glue.c > +++ b/drivers/scsi/sym53c8xx_2/sym_glue.c > @@ -693,9 +693,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 3f9caafa91bf..d1f065d4bcce 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -229,7 +229,7 @@ static struct ufs_dev_fix ufs_fixups[] = { > static irqreturn_t 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, bool init_dev_params); > @@ -7311,13 +7311,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 = SUCCESS; > unsigned long flags; > struct ufs_hba *hba; > > - hba = shost_priv(cmd->device->host); > + hba = shost_priv(shost); > > spin_lock_irqsave(hba->host->host_lock, flags); > hba->force_reset = true; > diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c > index f88ecdb93a8a..ddf1837babc0 100644 > --- a/drivers/scsi/vmw_pvscsi.c > +++ b/drivers/scsi/vmw_pvscsi.c > @@ -894,14 +894,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 3fe562047d85..7cfe736ed6c2 100644 > --- a/drivers/scsi/wd33c93.c > +++ b/drivers/scsi/wd33c93.c > @@ -1568,13 +1568,11 @@ reset_wd33c93(struct Scsi_Host *instance) > } > > 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; > > @@ -1599,7 +1597,6 @@ wd33c93_host_reset(struct scsi_cmnd * SCpnt) > hostdata->outgoing_len = 0; > > reset_wd33c93(instance); > - SCpnt->result = DID_RESET << 16; > enable_irq(instance->irq); > spin_unlock_irq(instance->host_lock); > return SUCCESS; > diff --git a/drivers/scsi/wd33c93.h b/drivers/scsi/wd33c93.h > index b3800baccd2c..87119e47836a 100644 > --- a/drivers/scsi/wd33c93.h > +++ b/drivers/scsi/wd33c93.h > @@ -341,6 +341,6 @@ int wd33c93_queuecommand (struct Scsi_Host *h, struct scsi_cmnd *cmd); > 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 ff1b22077251..02b8eb153944 100644 > --- a/drivers/scsi/wd719x.c > +++ b/drivers/scsi/wd719x.c > @@ -520,9 +520,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; > > diff --git a/drivers/staging/unisys/visorhba/visorhba_main.c b/drivers/staging/unisys/visorhba/visorhba_main.c > index 48aa18f8b984..0de0dd09cf9d 100644 > --- a/drivers/staging/unisys/visorhba/visorhba_main.c > +++ b/drivers/staging/unisys/visorhba/visorhba_main.c > @@ -390,11 +390,11 @@ static int visorhba_bus_reset_handler(struct scsi_cmnd *scsicmd) > > /* > * visorhba_host_reset_handler - Not supported > - * @scsicmd: The scsicmd that needs to be aborted > + * @shost: The scsi host that needs resetting > * > * Return: Not supported, return SUCCESS > */ > -static int visorhba_host_reset_handler(struct scsi_cmnd *scsicmd) > +static int 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 874ea4b54ced..8b560772c49a 100644 > --- a/drivers/usb/image/microtek.c > +++ b/drivers/usb/image/microtek.c > @@ -345,9 +345,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 6e29e1719db1..31f60d2ad318 100644 > --- a/include/scsi/libfc.h > +++ b/include/scsi/libfc.h > @@ -950,7 +950,7 @@ void fc_fcp_destroy(struct fc_lport *); > 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 667d889b92b5..3b8d9e65ea57 100644 > --- a/include/scsi/scsi_host.h > +++ b/include/scsi/scsi_host.h > @@ -141,7 +141,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 Reviewed-by: Lee Duncan <lduncan@suse.com>
diff --git a/Documentation/scsi/scsi_eh.rst b/Documentation/scsi/scsi_eh.rst index 885395dc1f15..12113cca5ad9 100644 --- a/Documentation/scsi/scsi_eh.rst +++ b/Documentation/scsi/scsi_eh.rst @@ -215,7 +215,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.rst b/Documentation/scsi/scsi_mid_low_api.rst index 63ddea2b9640..784587ea7eee 100644 --- a/Documentation/scsi/scsi_mid_low_api.rst +++ b/Documentation/scsi/scsi_mid_low_api.rst @@ -777,7 +777,7 @@ Details:: /** * eh_host_reset_handler - reset host (host bus adapter) - * @scp: SCSI host that contains this device should be reset + * @shp: SCSI host that contains this device should be reset * * Returns SUCCESS if command aborted else FAILED * @@ -794,7 +794,7 @@ Details:: * * Optionally defined in: LLD **/ - int eh_host_reset_handler(struct scsi_cmnd * scp) + int eh_host_reset_handler(struct Scsi_Host * shp) /** diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index 285b766e4e70..de901dee6935 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c @@ -2842,11 +2842,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 ed21cc4d2c77..3df07e024026 100644 --- a/drivers/message/fusion/mptscsih.c +++ b/drivers/message/fusion/mptscsih.c @@ -1956,15 +1956,15 @@ mptscsih_bus_reset(struct scsi_cmnd * SCpnt) /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ /** - * 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; @@ -1972,9 +1972,8 @@ mptscsih_host_reset(struct scsi_cmnd *SCpnt) 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; } @@ -1982,8 +1981,8 @@ mptscsih_host_reset(struct scsi_cmnd *SCpnt) 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. @@ -1994,8 +1993,8 @@ mptscsih_host_reset(struct scsi_cmnd *SCpnt) 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 e3d92c392673..0faefe9c7541 100644 --- a/drivers/message/fusion/mptscsih.h +++ b/drivers/message/fusion/mptscsih.h @@ -122,7 +122,7 @@ extern int mptscsih_abort(struct scsi_cmnd * SCpnt); extern int mptscsih_dev_reset(struct scsi_cmnd * SCpnt); extern int mptscsih_target_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 fb2b73fca381..873ccc60e4d6 100644 --- a/drivers/s390/scsi/zfcp_scsi.c +++ b/drivers/s390/scsi/zfcp_scsi.c @@ -371,9 +371,8 @@ static int zfcp_scsi_eh_target_reset_handler(struct scsi_cmnd *scpnt) return ret; } -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 = SUCCESS; unsigned long flags; diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c index cd823ff5deab..61af5c5eaccb 100644 --- a/drivers/scsi/3w-9xxx.c +++ b/drivers/scsi/3w-9xxx.c @@ -1717,18 +1717,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 3ebe66151dcb..c4d1ebf15700 100644 --- a/drivers/scsi/3w-sas.c +++ b/drivers/scsi/3w-sas.c @@ -1423,18 +1423,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 a853c5497af6..8c5f37563515 100644 --- a/drivers/scsi/3w-xxxx.c +++ b/drivers/scsi/3w-xxxx.c @@ -1366,25 +1366,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 e1e4f9d10887..6a44a0795bb5 100644 --- a/drivers/scsi/53c700.c +++ b/drivers/scsi/53c700.c @@ -155,7 +155,7 @@ MODULE_LICENSE("GPL"); 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); @@ -1934,40 +1934,41 @@ NCR_700_abort(struct scsi_cmnd * SCp) } 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 a897c8f914cf..62c3aa7570ab 100644 --- a/drivers/scsi/BusLogic.c +++ b/drivers/scsi/BusLogic.c @@ -2843,21 +2843,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 dece7d9eb4d3..6704415fb1c2 100644 --- a/drivers/scsi/NCR5380.c +++ b/drivers/scsi/NCR5380.c @@ -2379,9 +2379,8 @@ static void bus_reset_cleanup(struct Scsi_Host *instance) * 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); unsigned long flags; struct NCR5380_cmd *ncmd; diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c index 9c27bc37e5de..19a012c9a3c9 100644 --- a/drivers/scsi/aacraid/linit.c +++ b/drivers/scsi/aacraid/linit.c @@ -1078,13 +1078,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 * */ -static int aac_eh_host_reset(struct scsi_cmnd *cmd) +static 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 f301aec044bb..0b7fcf7f9624 100644 --- a/drivers/scsi/advansys.c +++ b/drivers/scsi/advansys.c @@ -7016,9 +7016,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; @@ -7028,7 +7027,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; @@ -7039,16 +7038,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"); @@ -7065,12 +7066,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/aha1542.c b/drivers/scsi/aha1542.c index cf7bba2ca68d..69063fe4aab8 100644 --- a/drivers/scsi/aha1542.c +++ b/drivers/scsi/aha1542.c @@ -913,15 +913,14 @@ static int aha1542_dev_reset(struct scsi_cmnd *cmd) aha1542_outb(sh->io_port, CMD_START_SCSI); spin_unlock_irqrestore(sh->host_lock, flags); - scmd_printk(KERN_WARNING, cmd, + sdev_printk(KERN_WARNING, sdev, "Trying device reset for target\n"); 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; @@ -933,9 +932,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; @@ -946,7 +945,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, @@ -954,7 +953,8 @@ 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", + sh->host_no); for (i = 0; i < AHA1542_MAILBOXES; i++) { if (aha1542->int_cmds[i] != NULL) { @@ -982,12 +982,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/acornscsi.c b/drivers/scsi/arm/acornscsi.c index 7602639da9b3..3fc9326fc4c0 100644 --- a/drivers/scsi/arm/acornscsi.c +++ b/drivers/scsi/arm/acornscsi.c @@ -2631,13 +2631,13 @@ int acornscsi_abort(struct scsi_cmnd *SCpnt) /* * Prototype: int acornscsi_reset(struct scsi_cmnd *SCpnt) * Purpose : reset a command on this host/reset this host - * Params : SCpnt - command causing reset + * Params : shost - host to be reset * Returns : one of SCSI_RESET_ macros */ -int acornscsi_host_reset(struct scsi_cmnd *SCpnt) +int acornscsi_host_reset(struct Scsi_Host *shost) { - AS_Host *host = (AS_Host *)SCpnt->device->host->hostdata; - struct scsi_cmnd *SCptr; + AS_Host *host = (AS_Host *)shost->hostdata; + struct scsi_cmnd *SCptr; host->stats.resets += 1; diff --git a/drivers/scsi/arm/fas216.c b/drivers/scsi/arm/fas216.c index e6289c6af5ef..38eec967155d 100644 --- a/drivers/scsi/arm/fas216.c +++ b/drivers/scsi/arm/fas216.c @@ -2656,9 +2656,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 08113277a2a9..f17583f143b3 100644 --- a/drivers/scsi/arm/fas216.h +++ b/drivers/scsi/arm/fas216.h @@ -394,11 +394,11 @@ extern int fas216_eh_device_reset(struct scsi_cmnd *SCpnt); */ 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 d401cf27113a..d967141f366c 100644 --- a/drivers/scsi/atari_scsi.c +++ b/drivers/scsi/atari_scsi.c @@ -667,7 +667,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; @@ -684,7 +684,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 e7be95ee7d64..50c04ba85b0b 100644 --- a/drivers/scsi/cxlflash/main.c +++ b/drivers/scsi/cxlflash/main.c @@ -2476,7 +2476,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 @@ -2487,11 +2487,10 @@ 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; diff --git a/drivers/scsi/dpt_i2o.c b/drivers/scsi/dpt_i2o.c index 93227c04ef59..6e3ad0e5b533 100644 --- a/drivers/scsi/dpt_i2o.c +++ b/drivers/scsi/dpt_i2o.c @@ -746,15 +746,15 @@ 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; char name[32]; - pHba = (adpt_hba*)cmd->device->host->hostdata[0]; + pHba = (adpt_hba*)shost->hostdata[0]; strncpy(name, pHba->name, sizeof(name)); - printk(KERN_WARNING"%s: Hba Reset: scsi id %d: tid: %d\n", name, cmd->device->channel, pHba->channel[cmd->device->channel].tid); + printk(KERN_WARNING"%s: Hba Reset\n", name); rcode = adpt_hba_reset(pHba); if(rcode == 0){ printk(KERN_WARNING"%s: HBA reset complete\n", name); @@ -765,13 +765,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 8a079e8d7f65..b77a3625fa6f 100644 --- a/drivers/scsi/dpti.h +++ b/drivers/scsi/dpti.h @@ -28,7 +28,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_slave_configure(struct scsi_device *); static const char *adpt_info(struct Scsi_Host *pSHost); diff --git a/drivers/scsi/esas2r/esas2r.h b/drivers/scsi/esas2r/esas2r.h index ed63f7a9ea54..a104d1a3a9da 100644 --- a/drivers/scsi/esas2r/esas2r.h +++ b/drivers/scsi/esas2r/esas2r.h @@ -976,7 +976,7 @@ long esas2r_proc_ioctl(struct file *fp, unsigned int cmd, unsigned long arg); /* 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 7a4eadad23d7..52494c8bb656 100644 --- a/drivers/scsi/esas2r/esas2r_main.c +++ b/drivers/scsi/esas2r/esas2r_main.c @@ -1059,10 +1059,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; @@ -1087,18 +1087,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 64ec6bb84550..b41eac8b5e0f 100644 --- a/drivers/scsi/esp_scsi.c +++ b/drivers/scsi/esp_scsi.c @@ -2640,9 +2640,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 444eac9b2466..5d3f1520ee50 100644 --- a/drivers/scsi/fdomain.c +++ b/drivers/scsi/fdomain.c @@ -456,9 +456,8 @@ static int fdomain_abort(struct scsi_cmnd *cmd) return SUCCESS; } -static int fdomain_host_reset(struct scsi_cmnd *cmd) +static int fdomain_host_reset(struct Scsi_Host *sh) { - struct Scsi_Host *sh = cmd->device->host; struct fdomain *fd = shost_priv(sh); unsigned long flags; diff --git a/drivers/scsi/fnic/fnic.h b/drivers/scsi/fnic/fnic.h index aa07189fb5fb..7b81bea3ffa2 100644 --- a/drivers/scsi/fnic/fnic.h +++ b/drivers/scsi/fnic/fnic.h @@ -359,7 +359,7 @@ void fnic_update_mac_locked(struct fnic *, u8 *new); 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 fb6dc59a5a7e..b286d5feaca1 100644 --- a/drivers/scsi/fnic/fnic_scsi.c +++ b/drivers/scsi/fnic/fnic_scsi.c @@ -2452,11 +2452,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 f18b770626e6..30f6a6891ea2 100644 --- a/drivers/scsi/hptiop.c +++ b/drivers/scsi/hptiop.c @@ -1091,12 +1091,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 2e7128f0d905..5fb36cd70dde 100644 --- a/drivers/scsi/ibmvscsi/ibmvfc.c +++ b/drivers/scsi/ibmvscsi/ibmvfc.c @@ -2984,10 +2984,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 63f32f843e75..892d79e2e7e1 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c @@ -1735,10 +1735,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 7a499d621c25..757175d09b2b 100644 --- a/drivers/scsi/imm.c +++ b/drivers/scsi/imm.c @@ -984,9 +984,9 @@ 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 *host) { - imm_struct *dev = imm_dev(cmd->device->host); + imm_struct *dev = imm_dev(host); if (imm_scsi_pointer(cmd)->phase) imm_disconnect(dev); diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index 104bee9b3a9d..29893dae7f24 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c @@ -5181,14 +5181,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 d49c1d6df5d6..f57858f561e3 100644 --- a/drivers/scsi/ips.c +++ b/drivers/scsi/ips.c @@ -229,7 +229,7 @@ module_param(ips, charp, 0); * Function prototypes */ 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 *); @@ -829,7 +829,7 @@ 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; @@ -842,13 +842,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"); @@ -994,13 +988,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; } @@ -1078,7 +1072,7 @@ static int ips_queue_lck(struct scsi_cmnd *SC) 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; scsi_done(SC); return (0); diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c index 074996319df5..ab4a1c01a353 100644 --- a/drivers/scsi/libfc/fc_fcp.c +++ b/drivers/scsi/libfc/fc_fcp.c @@ -2195,11 +2195,10 @@ EXPORT_SYMBOL(fc_eh_device_reset); /** * 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 1959c58d22f8..0443846c9fad 100644 --- a/drivers/scsi/lpfc/lpfc_scsi.c +++ b/drivers/scsi/lpfc/lpfc_scsi.c @@ -6503,9 +6503,8 @@ lpfc_target_reset_handler(struct scsi_cmnd *cmnd) * 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 070ebe352f9e..466efe781376 100644 --- a/drivers/scsi/mac53c94.c +++ b/drivers/scsi/mac53c94.c @@ -100,14 +100,14 @@ static int mac53c94_queue_lck(struct scsi_cmnd *cmd) 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, ®s->command); /* assert RST */ @@ -117,7 +117,7 @@ static int mac53c94_host_reset(struct scsi_cmnd *cmd) mac53c94_init(state); writeb(CMD_NOP, ®s->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 9484632ffed6..6f6b66715707 100644 --- a/drivers/scsi/megaraid.c +++ b/drivers/scsi/megaraid.c @@ -1875,13 +1875,13 @@ megaraid_abort(struct scsi_cmnd *cmd) 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 013fbfb911b9..43acad67d95f 100644 --- a/drivers/scsi/megaraid.h +++ b/drivers/scsi/megaraid.h @@ -973,7 +973,7 @@ static irqreturn_t megaraid_isr_iomapped(int, void *); static void mega_free_scb(adapter_t *, scb_t *); static int megaraid_abort(struct scsi_cmnd *); -static int megaraid_reset(struct scsi_cmnd *); +static int megaraid_reset(struct Scsi_Host *); static int megaraid_abort_and_reset(adapter_t *, struct 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 2a339d4a7e9d..e250566a17b6 100644 --- a/drivers/scsi/megaraid/megaraid_mbox.c +++ b/drivers/scsi/megaraid/megaraid_mbox.c @@ -92,7 +92,7 @@ static int megaraid_sysfs_alloc_resources(adapter_t *); 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 []); @@ -2512,7 +2512,7 @@ megaraid_abort_handler(struct scsi_cmnd *scp) * host. **/ static int -megaraid_reset_handler(struct scsi_cmnd *scp) +megaraid_reset_handler(struct Scsi_Host *shost) { adapter_t *adapter; scb_t *scb; @@ -2525,7 +2525,7 @@ megaraid_reset_handler(struct scsi_cmnd *scp) int i; uioc_t *kioc; - adapter = SCP2ADAPTER(scp); + adapter = (adapter_t *)SCSIHOST2ADAP(shost); raid_dev = ADAP2RAIDDEV(adapter); // return failure if adapter is not responding @@ -2556,15 +2556,9 @@ megaraid_reset_handler(struct scsi_cmnd *scp) 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); scsi_done(scb->scp); diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c index c95360a3c186..0222e234f108 100644 --- a/drivers/scsi/megaraid/megaraid_sas_base.c +++ b/drivers/scsi/megaraid/megaraid_sas_base.c @@ -2896,15 +2896,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"); @@ -3057,31 +3056,30 @@ megasas_dump_sys_regs(void __iomem *reg_set, char *buf) * megasas_reset_bus_host - Bus & host reset handler entry point * @scmd: Mid-layer SCSI command */ -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, "OCR is requested due to IO timeout!!\n"); - scmd_printk(KERN_INFO, scmd, - "SCSI host state: %d SCSI host busy: %d FW outstanding: %d\n", - scmd->device->host->shost_state, - scsi_host_busy(scmd->device->host), + shost_printk(KERN_INFO, shost, + "Controller reset is requested due to IO timeout\n" + "SCSI host state: %d\t" + " SCSI host busy: %d\t FW outstanding: %d\n", + shost->shost_state, + scsi_host_busy(shost), atomic_read(&instance->fw_outstanding)); /* * First wait for all commands to complete */ - if (instance->adapter_type == MFI_SERIES) { - ret = megasas_generic_reset(scmd); - } else { - megasas_dump_fusion_io(scmd); - ret = megasas_reset_fusion(scmd->device->host, - SCSIIO_TIMEOUT_OCR); - } + if (instance->adapter_type == MFI_SERIES) + ret = megasas_generic_reset(shost); + else + ret = megasas_reset_fusion(shost, SCSIIO_TIMEOUT_OCR); return ret; } diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c index 322d3ad38159..5e1d0bde36f3 100644 --- a/drivers/scsi/mesh.c +++ b/drivers/scsi/mesh.c @@ -1699,9 +1699,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; @@ -1718,7 +1718,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); @@ -1727,13 +1727,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/mpi3mr/mpi3mr_os.c b/drivers/scsi/mpi3mr/mpi3mr_os.c index 31f05e9f5ee0..bd42d3a56590 100644 --- a/drivers/scsi/mpi3mr/mpi3mr_os.c +++ b/drivers/scsi/mpi3mr/mpi3mr_os.c @@ -3335,15 +3335,15 @@ void mpi3mr_wait_for_host_io(struct mpi3mr_ioc *mrioc, u32 timeout) /** * mpi3mr_eh_host_reset - Host reset error handling callback - * @scmd: SCSI command reference + * @shost: SCSI host reference * * Issue controller reset * * Return: SUCCESS of successful reset else FAILED */ -static int mpi3mr_eh_host_reset(struct scsi_cmnd *scmd) +static int mpi3mr_eh_host_reset(struct Scsi_Host *shost) { - struct mpi3mr_ioc *mrioc = shost_priv(scmd->device->host); + struct mpi3mr_ioc *mrioc = shost_priv(shost); int retval = FAILED, ret; ret = mpi3mr_soft_reset_handler(mrioc, @@ -3353,9 +3353,9 @@ static int mpi3mr_eh_host_reset(struct scsi_cmnd *scmd) retval = SUCCESS; out: - sdev_printk(KERN_INFO, scmd->device, - "Host reset is %s for scmd(%p)\n", - ((retval == SUCCESS) ? "SUCCESS" : "FAILED"), scmd); + shost_printk(KERN_INFO, shost, + "Host reset is %s\n", + ((retval == SUCCESS) ? "SUCCESS" : "FAILED")); return retval; } diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c index 7e476f50935b..ea9a8799f89a 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c @@ -3526,13 +3526,12 @@ scsih_target_reset(struct scsi_cmnd *scmd) * Return: 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; - ioc_info(ioc, "attempting host reset! scmd(0x%p)\n", scmd); - scsi_print_command(scmd); + ioc_info(ioc, "attempting host reset\n"); if (ioc->is_driver_loading || ioc->remove_host) { ioc_info(ioc, "Blocking the host reset\n"); @@ -3543,8 +3542,8 @@ scsih_host_reset(struct scsi_cmnd *scmd) retval = mpt3sas_base_hard_reset_handler(ioc, FORCE_BIG_HAMMER); r = (retval < 0) ? FAILED : SUCCESS; out: - ioc_info(ioc, "host reset: %s scmd(0x%p)\n", - r == SUCCESS ? "SUCCESS" : "FAILED", scmd); + ioc_info(ioc, "host reset: %s\n", + r == SUCCESS ? "SUCCESS" : "FAILED"); return r; } diff --git a/drivers/scsi/mvumi.c b/drivers/scsi/mvumi.c index 05d3ce9b72db..249813bc926e 100644 --- a/drivers/scsi/mvumi.c +++ b/drivers/scsi/mvumi.c @@ -695,14 +695,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 -%u cmd=%x retries=%x\n", - scsi_cmd_to_rq(scmd)->tag, scmd->cmnd[0], scmd->retries); + shost_printk(KERN_NOTICE, shost, "RESET\n"); return mhba->instancet->reset_host(mhba); } diff --git a/drivers/scsi/myrb.c b/drivers/scsi/myrb.c index 71585528e8db..437b11d48238 100644 --- a/drivers/scsi/myrb.c +++ b/drivers/scsi/myrb.c @@ -1251,9 +1251,8 @@ static void myrb_cleanup(struct myrb_hba *cb) scsi_host_put(cb->host); } -static int myrb_host_reset(struct scsi_cmnd *scmd) +static int myrb_host_reset(struct Scsi_Host *shost) { - struct Scsi_Host *shost = scmd->device->host; struct myrb_hba *cb = shost_priv(shost); cb->reset(cb->io_base); diff --git a/drivers/scsi/myrs.c b/drivers/scsi/myrs.c index 7eb8c39da366..caa5511ca923 100644 --- a/drivers/scsi/myrs.c +++ b/drivers/scsi/myrs.c @@ -1529,9 +1529,8 @@ ATTRIBUTE_GROUPS(myrs_shost); /* * SCSI midlayer interface */ -static int myrs_host_reset(struct scsi_cmnd *scmd) +static int myrs_host_reset(struct Scsi_Host *shost) { - struct Scsi_Host *shost = scmd->device->host; struct myrs_hba *cs = shost_priv(shost); cs->reset(cs->io_base); diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c index 75bb0028ed74..d1f760c8e8ce 100644 --- a/drivers/scsi/nsp32.c +++ b/drivers/scsi/nsp32.c @@ -191,7 +191,7 @@ static int nsp32_release (struct Scsi_Host *); /* SCSI error handler */ static int nsp32_eh_abort (struct scsi_cmnd *); -static int nsp32_eh_host_reset(struct scsi_cmnd *); +static int nsp32_eh_host_reset(struct Scsi_Host *); /* generate SCSI message */ static void nsp32_build_identify(struct scsi_cmnd *); @@ -2876,23 +2876,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); - 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/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c index 48acab03a8a0..4aa9737fa711 100644 --- a/drivers/scsi/pcmcia/nsp_cs.c +++ b/drivers/scsi/pcmcia/nsp_cs.c @@ -1497,9 +1497,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/nsp_cs.h b/drivers/scsi/pcmcia/nsp_cs.h index e1ee8ef90ad3..f532adb5f166 100644 --- a/drivers/scsi/pcmcia/nsp_cs.h +++ b/drivers/scsi/pcmcia/nsp_cs.h @@ -300,7 +300,7 @@ static int nsp_queuecommand(struct Scsi_Host *h, struct scsi_cmnd *SCpnt); /*static int nsp_eh_abort (struct scsi_cmnd *SCpnt);*/ /*static int nsp_eh_device_reset(struct scsi_cmnd *SCpnt);*/ static int nsp_eh_bus_reset (struct scsi_cmnd *SCpnt); -static int nsp_eh_host_reset (struct scsi_cmnd *SCpnt); +static int nsp_eh_host_reset (struct Scsi_Host *host); static int nsp_bus_reset (nsp_hw_data *data); /* */ diff --git a/drivers/scsi/pcmcia/qlogic_stub.c b/drivers/scsi/pcmcia/qlogic_stub.c index 310d0b6586a6..59893db166c9 100644 --- a/drivers/scsi/pcmcia/qlogic_stub.c +++ b/drivers/scsi/pcmcia/qlogic_stub.c @@ -270,8 +270,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 5d7dfefd6f6c..79862f17de8d 100644 --- a/drivers/scsi/pcmcia/sym53c500_cs.c +++ b/drivers/scsi/pcmcia/sym53c500_cs.c @@ -583,14 +583,14 @@ static int SYM53C500_queue_lck(struct scsi_cmnd *SCpnt) 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 62b9de87ff05..79ca737ac75b 100644 --- a/drivers/scsi/pmcraid.c +++ b/drivers/scsi/pmcraid.c @@ -3086,19 +3086,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 c6c1bc608224..14a4b582fa9e 100644 --- a/drivers/scsi/ppa.c +++ b/drivers/scsi/ppa.c @@ -867,9 +867,9 @@ 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 *host) { - ppa_struct *dev = ppa_dev(cmd->device->host); + ppa_struct *dev = ppa_dev(host); if (ppa_scsi_pointer(cmd)->phase) ppa_disconnect(dev); diff --git a/drivers/scsi/qedf/qedf_main.c b/drivers/scsi/qedf/qedf_main.c index 85ccfbc5cd26..c12fb3465946 100644 --- a/drivers/scsi/qedf/qedf_main.c +++ b/drivers/scsi/qedf/qedf_main.c @@ -952,12 +952,12 @@ 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 31ec429104e2..dfb12f80fd9f 100644 --- a/drivers/scsi/qedi/qedi_iscsi.c +++ b/drivers/scsi/qedi/qedi_iscsi.c @@ -30,9 +30,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 c4466e4e692f..cd4c7126c1c9 100644 --- a/drivers/scsi/qla1280.c +++ b/drivers/scsi/qla1280.c @@ -995,10 +995,9 @@ qla1280_eh_bus_reset(struct scsi_cmnd *cmd) * 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 762229d495a8..5f86e7bd5a0e 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -1604,8 +1604,7 @@ qla2xxx_eh_bus_reset(struct scsi_cmnd *cmd) * 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. @@ -1613,13 +1612,11 @@ qla2xxx_eh_bus_reset(struct scsi_cmnd *cmd) * 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)) { @@ -1629,11 +1626,8 @@ qla2xxx_eh_host_reset(struct scsi_cmnd *cmd) 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 @@ -1679,8 +1673,8 @@ qla2xxx_eh_host_reset(struct scsi_cmnd *cmd) 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 f4969b99c07f..8f89080e2580 100644 --- a/drivers/scsi/qla4xxx/ql4_os.c +++ b/drivers/scsi/qla4xxx/ql4_os.c @@ -159,7 +159,7 @@ static int qla4xxx_queuecommand(struct Scsi_Host *h, struct scsi_cmnd *cmd); 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); @@ -9411,18 +9411,18 @@ 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; int rval; - ha = to_qla_host(cmd->device->host); + ha = to_qla_host(host); rval = qla4xxx_isp_check_reg(ha); if (rval != QLA_SUCCESS) { @@ -9444,20 +9444,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 3e065d5fc80c..008e908e3aff 100644 --- a/drivers/scsi/qlogicfas408.c +++ b/drivers/scsi/qlogicfas408.c @@ -525,20 +525,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 a971db11d293..c1b6e9fea9ce 100644 --- a/drivers/scsi/qlogicfas408.h +++ b/drivers/scsi/qlogicfas408.h @@ -109,7 +109,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/qlogicpti.c b/drivers/scsi/qlogicpti.c index 57f2f4135a06..bd3defa15933 100644 --- a/drivers/scsi/qlogicpti.c +++ b/drivers/scsi/qlogicpti.c @@ -1260,10 +1260,9 @@ static int qlogicpti_abort(struct scsi_cmnd *Cmnd) return return_status; } -static int qlogicpti_reset(struct scsi_cmnd *Cmnd) +static int qlogicpti_reset(struct Scsi_Host *host) { u_short param[6]; - struct Scsi_Host *host = Cmnd->device->host; struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; int return_status = SUCCESS; diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index 592a290e6cfa..6292ac7aef7a 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -5357,15 +5357,15 @@ 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__); + 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, @@ -5377,7 +5377,7 @@ static int scsi_debug_host_reset(struct scsi_cmnd *SCpnt) 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 cdaca13ac1f1..747131ca8970 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -841,7 +841,7 @@ static enum scsi_disposition 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 e40492d36031..79916e803b26 100644 --- a/drivers/scsi/snic/snic.h +++ b/drivers/scsi/snic/snic.h @@ -380,8 +380,7 @@ extern const struct attribute_group *snic_host_groups[]; 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 635656ccf30a..3722383fb529 100644 --- a/drivers/scsi/snic/snic_scsi.c +++ b/drivers/scsi/snic/snic_scsi.c @@ -2295,8 +2295,15 @@ snic_issue_hba_reset(struct snic *snic, struct scsi_cmnd *sc) 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; @@ -2360,34 +2367,6 @@ snic_reset(struct Scsi_Host *shost) (ulong) sc, jiffies_to_msecs(jiffies - start_time), 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; - u32 start_time = jiffies; - int ret; - - SNIC_SCSI_DBG(shost, - "host reset:sc %p sc_cmd 0x%x req %p tag %d flags 0x%llx\n", - sc, sc->cmnd[0], scsi_cmd_to_rq(sc), - snic_cmd_tag(sc), CMD_FLAGS(sc)); - - ret = snic_reset(shost); - - SNIC_TRC(shost->host_no, snic_cmd_tag(sc), (ulong) sc, - jiffies_to_msecs(jiffies - start_time), - 0, SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); - return ret; } /* end of snic_host_reset */ diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c index e6420f2127ce..d6f7e3f541e2 100644 --- a/drivers/scsi/stex.c +++ b/drivers/scsi/stex.c @@ -1433,14 +1433,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 9a0bba5a51a7..70bc095c6e78 100644 --- a/drivers/scsi/storvsc_drv.c +++ b/drivers/scsi/storvsc_drv.c @@ -1659,9 +1659,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/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c index cb8885eb5a5b..a573baa5bdf2 100644 --- a/drivers/scsi/sym53c8xx_2/sym_glue.c +++ b/drivers/scsi/sym53c8xx_2/sym_glue.c @@ -693,9 +693,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 3f9caafa91bf..d1f065d4bcce 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -229,7 +229,7 @@ static struct ufs_dev_fix ufs_fixups[] = { static irqreturn_t 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, bool init_dev_params); @@ -7311,13 +7311,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 = SUCCESS; unsigned long flags; struct ufs_hba *hba; - hba = shost_priv(cmd->device->host); + hba = shost_priv(shost); spin_lock_irqsave(hba->host->host_lock, flags); hba->force_reset = true; diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c index f88ecdb93a8a..ddf1837babc0 100644 --- a/drivers/scsi/vmw_pvscsi.c +++ b/drivers/scsi/vmw_pvscsi.c @@ -894,14 +894,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 3fe562047d85..7cfe736ed6c2 100644 --- a/drivers/scsi/wd33c93.c +++ b/drivers/scsi/wd33c93.c @@ -1568,13 +1568,11 @@ reset_wd33c93(struct Scsi_Host *instance) } 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; @@ -1599,7 +1597,6 @@ wd33c93_host_reset(struct scsi_cmnd * SCpnt) hostdata->outgoing_len = 0; reset_wd33c93(instance); - SCpnt->result = DID_RESET << 16; enable_irq(instance->irq); spin_unlock_irq(instance->host_lock); return SUCCESS; diff --git a/drivers/scsi/wd33c93.h b/drivers/scsi/wd33c93.h index b3800baccd2c..87119e47836a 100644 --- a/drivers/scsi/wd33c93.h +++ b/drivers/scsi/wd33c93.h @@ -341,6 +341,6 @@ int wd33c93_queuecommand (struct Scsi_Host *h, struct scsi_cmnd *cmd); 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 ff1b22077251..02b8eb153944 100644 --- a/drivers/scsi/wd719x.c +++ b/drivers/scsi/wd719x.c @@ -520,9 +520,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; diff --git a/drivers/staging/unisys/visorhba/visorhba_main.c b/drivers/staging/unisys/visorhba/visorhba_main.c index 48aa18f8b984..0de0dd09cf9d 100644 --- a/drivers/staging/unisys/visorhba/visorhba_main.c +++ b/drivers/staging/unisys/visorhba/visorhba_main.c @@ -390,11 +390,11 @@ static int visorhba_bus_reset_handler(struct scsi_cmnd *scsicmd) /* * visorhba_host_reset_handler - Not supported - * @scsicmd: The scsicmd that needs to be aborted + * @shost: The scsi host that needs resetting * * Return: Not supported, return SUCCESS */ -static int visorhba_host_reset_handler(struct scsi_cmnd *scsicmd) +static int 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 874ea4b54ced..8b560772c49a 100644 --- a/drivers/usb/image/microtek.c +++ b/drivers/usb/image/microtek.c @@ -345,9 +345,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 6e29e1719db1..31f60d2ad318 100644 --- a/include/scsi/libfc.h +++ b/include/scsi/libfc.h @@ -950,7 +950,7 @@ void fc_fcp_destroy(struct fc_lport *); 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 667d889b92b5..3b8d9e65ea57 100644 --- a/include/scsi/scsi_host.h +++ b/include/scsi/scsi_host.h @@ -141,7 +141,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