From: Hannes Reinecke <hare@suse.de>
To: James Bottomley <jbottomley@parallels.com>
Cc: Christoph Hellwig <hch@infradead.org>,
linux-scsi@vger.kernel.org, Hannes Reinecke <hare@suse.de>
Subject: [PATCH 6/7] scsi: Use Scsi_Host as argument for eh_host_reset_handler
Date: Fri, 27 Jun 2014 08:27:04 +0200 [thread overview]
Message-ID: <1403850425-89297-7-git-send-email-hare@suse.de> (raw)
In-Reply-To: <1403850425-89297-1-git-send-email-hare@suse.de>
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>
---
Documentation/scsi/scsi_eh.txt | 2 +-
Documentation/scsi/scsi_mid_low_api.txt | 4 +--
arch/ia64/hp/sim/simscsi.c | 2 +-
drivers/infiniband/ulp/srp/ib_srp.c | 4 +--
drivers/message/fusion/mptscsih.c | 18 ++++++------
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 | 15 +++++-----
drivers/scsi/BusLogic.c | 13 +++------
drivers/scsi/NCR53c406a.c | 6 ++--
drivers/scsi/aacraid/linit.c | 14 ++++-----
drivers/scsi/aha152x.c | 11 +-------
drivers/scsi/aha152x.h | 2 +-
drivers/scsi/aha1542.c | 22 +++++++--------
drivers/scsi/arm/fas216.c | 8 +++---
drivers/scsi/arm/fas216.h | 2 +-
drivers/scsi/dpt_i2o.c | 14 ++++-----
drivers/scsi/dpti.h | 2 +-
drivers/scsi/eata.c | 19 +++----------
drivers/scsi/eata_pio.c | 29 +++++++++----------
drivers/scsi/esas2r/esas2r.h | 2 +-
drivers/scsi/esas2r/esas2r_main.c | 16 ++++++-----
drivers/scsi/esp_scsi.c | 4 +--
drivers/scsi/fnic/fnic.h | 2 +-
drivers/scsi/fnic/fnic_scsi.c | 3 +-
drivers/scsi/ibmvscsi/ibmvfc.c | 4 +--
drivers/scsi/ibmvscsi/ibmvscsi.c | 4 +--
drivers/scsi/imm.c | 7 ++---
drivers/scsi/ipr.c | 4 +--
drivers/scsi/ips.c | 40 ++++++--------------------
drivers/scsi/libfc/fc_fcp.c | 5 ++--
drivers/scsi/lpfc/lpfc_scsi.c | 3 +-
drivers/scsi/mac53c94.c | 8 +++---
drivers/scsi/megaraid.c | 16 +++++------
drivers/scsi/megaraid.h | 2 +-
drivers/scsi/megaraid/megaraid_mbox.c | 16 +++--------
drivers/scsi/megaraid/megaraid_sas_base.c | 32 +++++----------------
drivers/scsi/mesh.c | 10 +++----
drivers/scsi/mpt2sas/mpt2sas_scsih.c | 13 ++++-----
drivers/scsi/mpt3sas/mpt3sas_scsih.c | 13 ++++-----
drivers/scsi/mvumi.c | 7 ++---
drivers/scsi/nsp32.c | 14 ++++-----
drivers/scsi/pcmcia/aha152x_stub.c | 2 +-
drivers/scsi/pcmcia/nsp_cs.c | 4 +--
drivers/scsi/pcmcia/sym53c500_cs.c | 8 +++---
drivers/scsi/pmcraid.c | 4 +--
drivers/scsi/ppa.c | 7 ++---
drivers/scsi/qla1280.c | 23 ++++++++++++---
drivers/scsi/qla2xxx/qla_os.c | 17 ++++-------
drivers/scsi/qla4xxx/ql4_os.c | 16 +++++------
drivers/scsi/scsi_debug.c | 2 +-
drivers/scsi/scsi_error.c | 2 +-
drivers/scsi/sgiwd93.c | 15 ----------
drivers/scsi/stex.c | 5 ++--
drivers/scsi/storvsc_drv.c | 4 +--
drivers/scsi/sym53c416.c | 6 ++--
drivers/scsi/sym53c8xx_2/sym_glue.c | 47 +++++++++++++++++++++----------
drivers/scsi/u14-34f.c | 17 ++++-------
drivers/scsi/ultrastor.c | 7 ++---
drivers/scsi/vmw_pvscsi.c | 5 ++--
drivers/scsi/wd33c93.c | 7 ++---
drivers/scsi/wd33c93.h | 2 +-
drivers/scsi/wd7000.c | 10 +++----
drivers/usb/image/microtek.c | 4 +--
include/scsi/libfc.h | 2 +-
include/scsi/scsi_host.h | 2 +-
69 files changed, 289 insertions(+), 379 deletions(-)
diff --git a/Documentation/scsi/scsi_eh.txt b/Documentation/scsi/scsi_eh.txt
index a0c8511..c530296 100644
--- a/Documentation/scsi/scsi_eh.txt
+++ b/Documentation/scsi/scsi_eh.txt
@@ -210,7 +210,7 @@ considered to fail always.
int (* eh_abort_handler)(struct scsi_cmnd *);
int (* eh_device_reset_handler)(struct scsi_cmnd *);
int (* eh_bus_reset_handler)(struct scsi_cmnd *);
-int (* eh_host_reset_handler)(struct scsi_cmnd *);
+int (* eh_host_reset_handler)(struct Scsi_Host *);
Higher-severity actions are taken only when lower-severity actions
cannot recover some of failed scmds. Also, note that failure of the
diff --git a/Documentation/scsi/scsi_mid_low_api.txt b/Documentation/scsi/scsi_mid_low_api.txt
index d6a9bde..efed980 100644
--- a/Documentation/scsi/scsi_mid_low_api.txt
+++ b/Documentation/scsi/scsi_mid_low_api.txt
@@ -931,7 +931,7 @@ Details:
/**
* eh_host_reset_handler - reset host (host bus adapter)
- * @scp: SCSI host that contains this device should be reset
+ * @shost: SCSI host that contains this device should be reset
*
* Returns SUCCESS if command aborted else FAILED
*
@@ -948,7 +948,7 @@ Details:
*
* Optionally defined in: LLD
**/
- int eh_host_reset_handler(struct scsi_cmnd * scp)
+ int eh_host_reset_handler(struct Scsi_Host * shost)
/**
diff --git a/arch/ia64/hp/sim/simscsi.c b/arch/ia64/hp/sim/simscsi.c
index 3a428f1..4dbe6b3 100644
--- a/arch/ia64/hp/sim/simscsi.c
+++ b/arch/ia64/hp/sim/simscsi.c
@@ -329,7 +329,7 @@ simscsi_queuecommand_lck (struct scsi_cmnd *sc, void (*done)(struct scsi_cmnd *)
static DEF_SCSI_QCMD(simscsi_queuecommand)
static int
-simscsi_host_reset (struct scsi_cmnd *sc)
+simscsi_host_reset (struct Scsi_Host *sh)
{
printk(KERN_ERR "simscsi_host_reset: not implemented\n");
return 0;
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index e3c2c5b..177039b 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -2405,9 +2405,9 @@ 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");
diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c
index 39e5668..7a7d03a6 100644
--- a/drivers/message/fusion/mptscsih.c
+++ b/drivers/message/fusion/mptscsih.c
@@ -1913,14 +1913,14 @@ 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
+ * @shost: Pointer to Scsi_Host structure to be reset
*
* (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 *shost)
{
MPT_SCSI_HOST * hd;
int status = SUCCESS;
@@ -1928,9 +1928,9 @@ 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){
+ if ((hd = shost_priv(shost)) == NULL){
printk(KERN_ERR MYNAM ": host reset: "
- "Can't locate host! (sc=%p)\n", SCpnt);
+ "Can't locate host!\n");
return FAILED;
}
@@ -1938,20 +1938,20 @@ 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.
*/
- retval = mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP);
+ retval = mpt_Soft_Hard_ResetHandler(ioc, CAN_SLEEP);
if (retval < 0)
status = FAILED;
else
status = SUCCESS;
- printk(MYIOC_s_INFO_FMT "host reset: %s (sc=%p)\n",
- ioc->name, ((retval == 0) ? "SUCCESS" : "FAILED" ), SCpnt);
+ printk(MYIOC_s_INFO_FMT "host reset: %s\n",
+ ioc->name, ((retval == 0) ? "SUCCESS" : "FAILED" ));
return status;
}
diff --git a/drivers/message/fusion/mptscsih.h b/drivers/message/fusion/mptscsih.h
index e1b1a19..32067bc 100644
--- a/drivers/message/fusion/mptscsih.h
+++ b/drivers/message/fusion/mptscsih.h
@@ -121,7 +121,7 @@ extern int mptscsih_slave_configure(struct scsi_device *device);
extern int mptscsih_abort(struct scsi_cmnd * SCpnt);
extern int mptscsih_dev_reset(struct scsi_cmnd * SCpnt);
extern int mptscsih_bus_reset(struct scsi_cmnd * SCpnt);
-extern int mptscsih_host_reset(struct scsi_cmnd *SCpnt);
+extern int mptscsih_host_reset(struct Scsi_Host *shost);
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 dc42c93..fe50f69 100644
--- a/drivers/s390/scsi/zfcp_scsi.c
+++ b/drivers/s390/scsi/zfcp_scsi.c
@@ -281,13 +281,14 @@ static int zfcp_scsi_eh_target_reset_handler(struct scsi_cmnd *scpnt)
return zfcp_task_mgmt_function(scpnt, FCP_TMF_TGT_RESET);
}
-static int zfcp_scsi_eh_host_reset_handler(struct scsi_cmnd *scpnt)
+static int zfcp_scsi_eh_host_reset_handler(struct Scsi_Host *host)
{
struct zfcp_scsi_dev *zfcp_sdev = sdev_to_zfcp(scpnt->device);
struct zfcp_adapter *adapter = zfcp_sdev->port->adapter;
struct fc_rport *rport = zfcp_sdev->port->rport;
int ret;
+ adapter = (struct zfcp_adapter *)host->hostdata[0];
zfcp_erp_adapter_reopen(adapter, 0, "schrh_1");
zfcp_erp_wait(adapter);
ret = fc_block_scsi_eh(rport);
diff --git a/drivers/scsi/3w-9xxx.c b/drivers/scsi/3w-9xxx.c
index 0a73253..d3f4147 100644
--- a/drivers/scsi/3w-9xxx.c
+++ b/drivers/scsi/3w-9xxx.c
@@ -1736,18 +1736,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 4de3460..d54c197 100644
--- a/drivers/scsi/3w-sas.c
+++ b/drivers/scsi/3w-sas.c
@@ -1472,18 +1472,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 752624e..31b8d25 100644
--- a/drivers/scsi/3w-xxxx.c
+++ b/drivers/scsi/3w-xxxx.c
@@ -1394,25 +1394,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 a3adfb4..166a4e9 100644
--- a/drivers/scsi/53c700.c
+++ b/drivers/scsi/53c700.c
@@ -169,7 +169,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_bus_reset(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);
@@ -1975,17 +1975,16 @@ NCR_700_bus_reset(struct scsi_cmnd * SCp)
}
STATIC int
-NCR_700_host_reset(struct scsi_cmnd * SCp)
+NCR_700_host_reset(struct Scsi_Host * host)
{
- scmd_printk(KERN_INFO, SCp, "New error handler wants HOST reset\n\t");
- scsi_print_command(SCp);
+ shost_printk(KERN_INFO, shost, "SCSI EH wants HOST reset\n\t");
- spin_lock_irq(SCp->device->host->host_lock);
+ spin_lock_irq(host->host_lock);
- 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);
return SUCCESS;
}
diff --git a/drivers/scsi/BusLogic.c b/drivers/scsi/BusLogic.c
index 972f817..8bb5fa2 100644
--- a/drivers/scsi/BusLogic.c
+++ b/drivers/scsi/BusLogic.c
@@ -2998,21 +2998,16 @@ 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->adatper_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/NCR53c406a.c b/drivers/scsi/NCR53c406a.c
index c91888a..32363a3 100644
--- a/drivers/scsi/NCR53c406a.c
+++ b/drivers/scsi/NCR53c406a.c
@@ -728,11 +728,11 @@ static int NCR53c406a_queue_lck(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *))
static DEF_SCSI_QCMD(NCR53c406a_queue)
-static int NCR53c406a_host_reset(Scsi_Cmnd * SCpnt)
+static int NCR53c406a_host_reset(struct Scsi_Host * shost)
{
DEB(printk("NCR53c406a_reset called\n"));
- spin_lock_irq(SCpnt->device->host->host_lock);
+ spin_lock_irq(shost->host_lock);
outb(C4_IMG, CONFIG4); /* Select reg set 0 */
outb(CHIP_RESET, CMD_REG);
@@ -742,7 +742,7 @@ static int NCR53c406a_host_reset(Scsi_Cmnd * SCpnt)
rtrc(2);
- spin_unlock_irq(SCpnt->device->host->host_lock);
+ spin_unlock_irq(shost->host_lock);
return SUCCESS;
}
diff --git a/drivers/scsi/aacraid/linit.c b/drivers/scsi/aacraid/linit.c
index 63f576c..29396bf 100644
--- a/drivers/scsi/aacraid/linit.c
+++ b/drivers/scsi/aacraid/linit.c
@@ -598,11 +598,10 @@ static int aac_eh_abort(struct scsi_cmnd* cmd)
* @scsi_cmd: SCSI command block causing the reset
*
*/
-static int aac_eh_reset(struct scsi_cmnd* cmd)
+static int aac_eh_reset(struct Scsi_Host * host)
{
- struct scsi_device * dev = cmd->device;
- struct Scsi_Host * host = dev->host;
struct scsi_cmnd * command;
+ struct scsi_device *dev;
int count;
struct aac_dev * aac = (struct aac_dev *)host->hostdata;
unsigned long flags;
@@ -611,10 +610,10 @@ static int aac_eh_reset(struct scsi_cmnd* cmd)
for (count = 0; count < (host->can_queue + AAC_NUM_MGT_FIB); ++count) {
struct fib * fib = &aac->fibs[count];
if (fib->hw_fib_va->header.XferState &&
- (fib->flags & FIB_CONTEXT_FLAG) &&
- (fib->callback_data == cmd)) {
+ (fib->flags & FIB_CONTEXT_FLAG)) {
fib->flags |= FIB_CONTEXT_FLAG_TIMED_OUT;
- cmd->SCp.phase = AAC_OWNER_ERROR_HANDLER;
+ command = fib->callback_data;
+ command->SCp.phase = AAC_OWNER_ERROR_HANDLER;
}
}
printk(KERN_ERR "%s: Host adapter reset request. SCSI hang ?\n",
@@ -633,8 +632,7 @@ static int aac_eh_reset(struct scsi_cmnd* cmd)
__shost_for_each_device(dev, host) {
spin_lock_irqsave(&dev->list_lock, flags);
list_for_each_entry(command, &dev->cmd_list, list) {
- if ((command != cmd) &&
- (command->SCp.phase == AAC_OWNER_FIRMWARE)) {
+ if (command->SCp.phase == AAC_OWNER_FIRMWARE) {
active++;
break;
}
diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c
index e77b72f..fc78bb1 100644
--- a/drivers/scsi/aha152x.c
+++ b/drivers/scsi/aha152x.c
@@ -1331,7 +1331,7 @@ static void reset_ports(struct Scsi_Host *shpnt)
* Reset the host (bus and controller)
*
*/
-int aha152x_host_reset_host(struct Scsi_Host *shpnt)
+int aha152x_host_reset(struct Scsi_Host *shpnt)
{
DPRINTK(debug_eh, KERN_DEBUG "scsi%d: host reset\n", shpnt->host_no);
@@ -1344,15 +1344,6 @@ int aha152x_host_reset_host(struct Scsi_Host *shpnt)
}
/*
- * Reset the host (bus and controller)
- *
- */
-static int aha152x_host_reset(Scsi_Cmnd *SCpnt)
-{
- return aha152x_host_reset_host(SCpnt->device->host);
-}
-
-/*
* Return the "logical geometry"
*
*/
diff --git a/drivers/scsi/aha152x.h b/drivers/scsi/aha152x.h
index ac4bfa438b..3ccf724 100644
--- a/drivers/scsi/aha152x.h
+++ b/drivers/scsi/aha152x.h
@@ -332,6 +332,6 @@ struct aha152x_setup {
struct Scsi_Host *aha152x_probe_one(struct aha152x_setup *);
void aha152x_release(struct Scsi_Host *);
-int aha152x_host_reset_host(struct Scsi_Host *);
+int aha152x_host_reset(struct Scsi_Host *);
#endif /* _AHA152X_H */
diff --git a/drivers/scsi/aha1542.c b/drivers/scsi/aha1542.c
index 770c48d..dd92308 100644
--- a/drivers/scsi/aha1542.c
+++ b/drivers/scsi/aha1542.c
@@ -1379,7 +1379,7 @@ fail:
return FAILED;
}
-static int aha1542_host_reset(Scsi_Cmnd * SCpnt)
+static int aha1542_host_reset(struct Scsi_Host * shost)
{
int i;
@@ -1389,7 +1389,7 @@ static int aha1542_host_reset(Scsi_Cmnd * SCpnt)
* we do this? Try this first, and we can add that later
* if it turns out to be useful.
*/
- outb(HRST | SCRST, CONTROL(SCpnt->device->host->io_port));
+ outb(HRST | SCRST, CONTROL(shost->io_port));
/*
* Wait for the thing to settle down a bit. Unfortunately
@@ -1399,16 +1399,16 @@ static int aha1542_host_reset(Scsi_Cmnd * SCpnt)
* we are pretty desperate anyways.
*/
ssleep(4);
- spin_lock_irq(SCpnt->device->host->host_lock);
+ spin_lock_irq(shost->host_lock);
- WAIT(STATUS(SCpnt->device->host->io_port),
+ WAIT(STATUS(shost->io_port),
STATMASK, INIT | IDLE, STST | DIAGF | INVDCMD | DF | CDF);
/*
* We need to do this too before the 1542 can interact with
* us again.
*/
- setup_mailboxes(SCpnt->device->host->io_port, SCpnt->device->host);
+ setup_mailboxes(shost->io_port, shost);
/*
* Now try to pick up the pieces. For all pending commands,
@@ -1416,12 +1416,12 @@ static int aha1542_host_reset(Scsi_Cmnd * SCpnt)
* out. We do not try and restart any commands or anything -
* the strategy handler takes care of that crap.
*/
- printk(KERN_WARNING "Sent BUS RESET to scsi host %d\n", SCpnt->device->host->host_no);
+ printk(KERN_WARNING "Sent BUS RESET to scsi host %d\n", shost->host_no);
for (i = 0; i < AHA1542_MAILBOXES; i++) {
- if (HOSTDATA(SCpnt->device->host)->SCint[i] != NULL) {
+ if (HOSTDATA(shost)->SCint[i] != NULL) {
Scsi_Cmnd *SCtmp;
- SCtmp = HOSTDATA(SCpnt->device->host)->SCint[i];
+ SCtmp = HOSTDATA(shost)->SCint[i];
if (SCtmp->device->soft_reset) {
/*
@@ -1434,12 +1434,12 @@ static int aha1542_host_reset(Scsi_Cmnd * SCpnt)
}
kfree(SCtmp->host_scribble);
SCtmp->host_scribble = NULL;
- HOSTDATA(SCpnt->device->host)->SCint[i] = NULL;
- HOSTDATA(SCpnt->device->host)->mb[i].status = 0;
+ HOSTDATA(shost)->SCint[i] = NULL;
+ HOSTDATA(shost)->mb[i].status = 0;
}
}
- spin_unlock_irq(SCpnt->device->host->host_lock);
+ spin_unlock_irq(shost->host_lock);
return SUCCESS;
fail:
diff --git a/drivers/scsi/arm/fas216.c b/drivers/scsi/arm/fas216.c
index b46a6f6..753b2ed 100644
--- a/drivers/scsi/arm/fas216.c
+++ b/drivers/scsi/arm/fas216.c
@@ -2653,16 +2653,16 @@ 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);
fas216_checkmagic(info);
- printk("scsi%d.%c: %s: resetting host\n",
- info->host->host_no, '0' + SCpnt->device->id, __func__);
+ printk("scsi%d: %s: resetting host\n",
+ info->host->host_no, __func__);
/*
* Reset the SCSI chip.
diff --git a/drivers/scsi/arm/fas216.h b/drivers/scsi/arm/fas216.h
index c57c16e..9741c4c 100644
--- a/drivers/scsi/arm/fas216.h
+++ b/drivers/scsi/arm/fas216.h
@@ -388,6 +388,6 @@ extern int fas216_eh_bus_reset(struct scsi_cmnd *SCpnt);
* Params : SCpnt - command specifing 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/dpt_i2o.c b/drivers/scsi/dpt_i2o.c
index c0ae8fa..b1c22a3 100644
--- a/drivers/scsi/dpt_i2o.c
+++ b/drivers/scsi/dpt_i2o.c
@@ -797,12 +797,12 @@ static int adpt_bus_reset(struct scsi_cmnd* cmd)
}
// This version of reset is called by the eh_error_handler
-static int __adpt_reset(struct scsi_cmnd* cmd)
+static int __adpt_reset(struct Scsi_Host* shost)
{
adpt_hba* pHba;
int rcode;
- pHba = (adpt_hba*)cmd->device->host->hostdata[0];
- printk(KERN_WARNING"%s: Hba Reset: scsi id %d: tid: %d\n",pHba->name,cmd->device->channel,pHba->channel[cmd->device->channel].tid );
+ pHba = (adpt_hba*)shost->hostdata[0];
+ printk(KERN_WARNING"%s: Hba Reset\n",pHba->name);
rcode = adpt_hba_reset(pHba);
if(rcode == 0){
printk(KERN_WARNING"%s: HBA reset complete\n",pHba->name);
@@ -813,13 +813,13 @@ static int __adpt_reset(struct scsi_cmnd* cmd)
}
}
-static int adpt_reset(struct scsi_cmnd* cmd)
+static int adpt_reset(struct Scsi_Host* shost)
{
int rc;
- spin_lock_irq(cmd->device->host->host_lock);
- rc = __adpt_reset(cmd);
- spin_unlock_irq(cmd->device->host->host_lock);
+ spin_lock_irq(shost->host_lock);
+ rc = __adpt_reset(shost);
+ spin_unlock_irq(shost->host_lock);
return rc;
}
diff --git a/drivers/scsi/dpti.h b/drivers/scsi/dpti.h
index aeb0461..0d82d77 100644
--- a/drivers/scsi/dpti.h
+++ b/drivers/scsi/dpti.h
@@ -31,7 +31,7 @@
static int adpt_detect(struct scsi_host_template * sht);
static int adpt_queue(struct Scsi_Host *h, struct scsi_cmnd * cmd);
static int adpt_abort(struct scsi_cmnd * cmd);
-static int adpt_reset(struct scsi_cmnd* cmd);
+static int adpt_reset(struct Scsi_Host * host);
static int adpt_release(struct Scsi_Host *host);
static int adpt_slave_configure(struct scsi_device *);
diff --git a/drivers/scsi/eata.c b/drivers/scsi/eata.c
index 03372cf..cd893bf 100644
--- a/drivers/scsi/eata.c
+++ b/drivers/scsi/eata.c
@@ -507,7 +507,7 @@ static int eata2x_detect(struct scsi_host_template *);
static int eata2x_release(struct Scsi_Host *);
static int eata2x_queuecommand(struct Scsi_Host *, struct scsi_cmnd *);
static int eata2x_eh_abort(struct scsi_cmnd *);
-static int eata2x_eh_host_reset(struct scsi_cmnd *);
+static int eata2x_eh_host_reset(struct Scsi_Host *);
static int eata2x_bios_param(struct scsi_device *, struct block_device *,
sector_t, int *);
static int eata2x_slave_configure(struct scsi_device *);
@@ -1908,21 +1908,16 @@ static int eata2x_eh_abort(struct scsi_cmnd *SCarg)
panic("%s: abort, mbox %d, invalid cp_stat.\n", ha->board_name, i);
}
-static int eata2x_eh_host_reset(struct scsi_cmnd *SCarg)
+static int eata2x_eh_host_reset(struct Scsi_Host *shost)
{
unsigned int i, time, k, c, limit = 0;
- int arg_done = 0;
struct scsi_cmnd *SCpnt;
- struct Scsi_Host *shost = SCarg->device->host;
struct hostdata *ha = (struct hostdata *)shost->hostdata;
- scmd_printk(KERN_INFO, SCarg, "reset, enter.\n");
+ shost_printk(KERN_INFO, shost, "reset, enter.\n");
spin_lock_irq(shost->host_lock);
- if (SCarg->host_scribble == NULL)
- printk("%s: reset, inactive.\n", ha->board_name);
-
if (ha->in_reset) {
printk("%s: reset, exit, already in reset.\n", ha->board_name);
spin_unlock_irq(shost->host_lock);
@@ -1979,9 +1974,6 @@ static int eata2x_eh_host_reset(struct scsi_cmnd *SCarg)
if (SCpnt->scsi_done == NULL)
panic("%s: reset, mbox %d, SCpnt->scsi_done == NULL.\n",
ha->board_name, i);
-
- if (SCpnt == SCarg)
- arg_done = 1;
}
if (do_dma(shost->io_port, 0, RESET_PIO)) {
@@ -2049,10 +2041,7 @@ static int eata2x_eh_host_reset(struct scsi_cmnd *SCarg)
ha->in_reset = 0;
do_trace = 0;
- if (arg_done)
- printk("%s: reset, exit, done.\n", ha->board_name);
- else
- printk("%s: reset, exit.\n", ha->board_name);
+ printk("%s: reset, exit.\n", ha->board_name);
spin_unlock_irq(shost->host_lock);
return SUCCESS;
diff --git a/drivers/scsi/eata_pio.c b/drivers/scsi/eata_pio.c
index 8319d2b..b5470ceb3 100644
--- a/drivers/scsi/eata_pio.c
+++ b/drivers/scsi/eata_pio.c
@@ -435,19 +435,18 @@ static int eata_pio_abort(struct scsi_cmnd *cmd)
panic("eata_pio: abort: invalid slot status\n");
}
-static int eata_pio_host_reset(struct scsi_cmnd *cmd)
+static int eata_pio_host_reset(struct Scsi_Host *host)
{
unsigned int x, limit = 0;
unsigned char success = 0;
struct scsi_cmnd *sp;
- struct Scsi_Host *host = cmd->device->host;
- DBG(DBG_ABNORM, scmd_printk(KERN_WARNING, cmd,
+ DBG(DBG_ABNORM, shost_printk(KERN_WARNING, host,
"eata_pio_reset called\n"));
spin_lock_irq(host->host_lock);
- if (HD(cmd)->state == RESET) {
+ if (SD(host)->state == RESET) {
printk(KERN_WARNING "eata_pio_reset: exit, already in reset.\n");
spin_unlock_irq(host->host_lock);
return FAILED;
@@ -455,13 +454,13 @@ static int eata_pio_host_reset(struct scsi_cmnd *cmd)
/* force all slots to be free */
- for (x = 0; x < cmd->device->host->can_queue; x++) {
+ for (x = 0; x < host->can_queue; x++) {
- if (HD(cmd)->ccb[x].status == FREE)
+ if (SD(host)->ccb[x].status == FREE)
continue;
- sp = HD(cmd)->ccb[x].cmd;
- HD(cmd)->ccb[x].status = RESET;
+ sp = SD(host)->ccb[x].cmd;
+ SD(host)->ccb[x].status = RESET;
printk(KERN_WARNING "eata_pio_reset: slot %d in reset.\n", x);
if (sp == NULL)
@@ -469,10 +468,10 @@ static int eata_pio_host_reset(struct scsi_cmnd *cmd)
}
/* hard reset the HBA */
- outb(EATA_CMD_RESET, cmd->device->host->base + HA_WCOMMAND);
+ outb(EATA_CMD_RESET, host->base + HA_WCOMMAND);
DBG(DBG_ABNORM, printk(KERN_WARNING "eata_pio_reset: board reset done.\n"));
- HD(cmd)->state = RESET;
+ SD(host)->state = RESET;
spin_unlock_irq(host->host_lock);
msleep(3000);
@@ -480,23 +479,23 @@ static int eata_pio_host_reset(struct scsi_cmnd *cmd)
DBG(DBG_ABNORM, printk(KERN_WARNING "eata_pio_reset: interrupts disabled, " "loops %d.\n", limit));
- for (x = 0; x < cmd->device->host->can_queue; x++) {
+ for (x = 0; x < host->can_queue; x++) {
/* Skip slots already set free by interrupt */
- if (HD(cmd)->ccb[x].status != RESET)
+ if (SD(host)->ccb[x].status != RESET)
continue;
- sp = HD(cmd)->ccb[x].cmd;
+ sp = SD(host)->ccb[x].cmd;
sp->result = DID_RESET << 16;
/* This mailbox is terminated */
printk(KERN_WARNING "eata_pio_reset: reset ccb %d.\n", x);
- HD(cmd)->ccb[x].status = FREE;
+ SD(host)->ccb[x].status = FREE;
sp->scsi_done(sp);
}
- HD(cmd)->state = 0;
+ SD(host)->state = 0;
spin_unlock_irq(host->host_lock);
diff --git a/drivers/scsi/esas2r/esas2r.h b/drivers/scsi/esas2r/esas2r.h
index 3fd305d..9f12a50 100644
--- a/drivers/scsi/esas2r/esas2r.h
+++ b/drivers/scsi/esas2r/esas2r.h
@@ -982,7 +982,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 6504a19..1fa2baa 100644
--- a/drivers/scsi/esas2r/esas2r_main.c
+++ b/drivers/scsi/esas2r/esas2r_main.c
@@ -1126,10 +1126,10 @@ check_active_queue:
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;
@@ -1154,18 +1154,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 55548dc..f0b58b7 100644
--- a/drivers/scsi/esp_scsi.c
+++ b/drivers/scsi/esp_scsi.c
@@ -2592,9 +2592,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/fnic/fnic.h b/drivers/scsi/fnic/fnic.h
index 1d3521e..0e0a87a 100644
--- a/drivers/scsi/fnic/fnic.h
+++ b/drivers/scsi/fnic/fnic.h
@@ -343,7 +343,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 1fa1a87..ba90ccb 100644
--- a/drivers/scsi/fnic/fnic_scsi.c
+++ b/drivers/scsi/fnic/fnic_scsi.c
@@ -2465,11 +2465,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);
/*
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
index fee80fa..f2ed70c 100644
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
@@ -2528,10 +2528,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, block_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 2ebfb2b..3b3de48 100644
--- a/drivers/scsi/ibmvscsi/ibmvscsi.c
+++ b/drivers/scsi/ibmvscsi/ibmvscsi.c
@@ -1719,10 +1719,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 89a8266..c5b97d7 100644
--- a/drivers/scsi/imm.c
+++ b/drivers/scsi/imm.c
@@ -984,11 +984,11 @@ static void imm_reset_pulse(unsigned int base)
w_ctr(base, 0x04);
}
-static int imm_reset(struct scsi_cmnd *cmd)
+static int imm_reset(struct Scsi_Host *shost)
{
- imm_struct *dev = imm_dev(cmd->device->host);
+ imm_struct *dev = imm_dev(shost);
- if (cmd->SCp.phase)
+ if (dev->cur_cmd->SCp.phase)
imm_disconnect(dev);
dev->cur_cmd = NULL; /* Forget the problem */
@@ -1104,7 +1104,6 @@ static struct scsi_host_template imm_template = {
.name = "Iomega VPI2 (imm) interface",
.queuecommand = imm_queuecommand,
.eh_abort_handler = imm_abort,
- .eh_bus_reset_handler = imm_reset,
.eh_host_reset_handler = imm_reset,
.bios_param = imm_biosparam,
.this_id = 7,
diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c
index 924b0ba..26d3fd02 100644
--- a/drivers/scsi/ipr.c
+++ b/drivers/scsi/ipr.c
@@ -4843,14 +4843,14 @@ static int ipr_slave_alloc(struct scsi_device *sdev)
return rc;
}
-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 52a216f..7615f05 100644
--- a/drivers/scsi/ips.c
+++ b/drivers/scsi/ips.c
@@ -231,7 +231,7 @@ module_param(ips, charp, 0);
static int ips_detect(struct scsi_host_template *);
static int ips_release(struct Scsi_Host *);
static int ips_eh_abort(struct scsi_cmnd *);
-static int ips_eh_reset(struct scsi_cmnd *);
+static int ips_eh_reset(struct Scsi_Host *);
static int ips_queue(struct Scsi_Host *, struct scsi_cmnd *);
static const char *ips_info(struct Scsi_Host *);
static irqreturn_t do_ipsintr(int, void *);
@@ -838,13 +838,12 @@ int ips_eh_abort(struct scsi_cmnd *SC)
/* NOTE: this routine is called under the io_request_lock spinlock */
/* */
/****************************************************************************/
-static int __ips_eh_reset(struct scsi_cmnd *SC)
+static int __ips_eh_reset(struct Scsi_Host *shost)
{
int ret;
int i;
ips_ha_t *ha;
ips_scb_t *scb;
- ips_copp_wait_item_t *item;
METHOD_TRACE("ips_eh_reset", 1);
@@ -852,13 +851,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");
@@ -869,23 +862,6 @@ static int __ips_eh_reset(struct scsi_cmnd *SC)
if (!ha->active)
return (FAILED);
- /* See if the command is on the copp queue */
- item = ha->copp_waitlist.head;
- while ((item) && (item->scsi_cmd != SC))
- item = item->next;
-
- if (item) {
- /* Found it */
- ips_removeq_copp(&ha->copp_waitlist, item);
- return (SUCCESS);
- }
-
- /* See if the command is on the wait queue */
- if (ips_removeq_wait(&ha->scb_waitlist, SC)) {
- /* command not sent yet */
- return (SUCCESS);
- }
-
/* An explanation for the casual observer: */
/* Part of the function of a RAID controller is automatic error */
/* detection and recovery. As such, the only problem that physically */
@@ -1024,13 +1000,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;
}
@@ -1109,7 +1085,7 @@ static int ips_queue_lck(struct scsi_cmnd *SC, void (*done) (struct scsi_cmnd *)
return (0);
}
ha->ioctl_reset = 1; /* This reset request is from an IOCTL */
- __ips_eh_reset(SC);
+ __ips_eh_reset(SC->device->host);
SC->result = DID_OK << 16;
SC->scsi_done(SC);
return (0);
diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
index 40f26ea..ab7ec74 100644
--- a/drivers/scsi/libfc/fc_fcp.c
+++ b/drivers/scsi/libfc/fc_fcp.c
@@ -2116,11 +2116,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 832cb9f..df4a43c 100644
--- a/drivers/scsi/lpfc/lpfc_scsi.c
+++ b/drivers/scsi/lpfc/lpfc_scsi.c
@@ -5465,9 +5465,8 @@ lpfc_bus_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 e5cd8d8..f664f79 100644
--- a/drivers/scsi/mac53c94.c
+++ b/drivers/scsi/mac53c94.c
@@ -101,14 +101,14 @@ static int mac53c94_queue_lck(struct scsi_cmnd *cmd, void (*done)(struct scsi_cm
static DEF_SCSI_QCMD(mac53c94_queue)
-static int mac53c94_host_reset(struct scsi_cmnd *cmd)
+static int mac53c94_host_reset(struct Scsi_Host *shost)
{
- struct fsc_state *state = (struct fsc_state *) cmd->device->host->hostdata;
+ struct fsc_state *state = (struct fsc_state *) shost->hostdata;
struct mac53c94_regs __iomem *regs = state->regs;
struct dbdma_regs __iomem *dma = state->dma;
unsigned long flags;
- spin_lock_irqsave(cmd->device->host->host_lock, flags);
+ spin_lock_irqsave(shost->host_lock, flags);
writel((RUN|PAUSE|FLUSH|WAKE) << 16, &dma->control);
writeb(CMD_SCSI_RESET, ®s->command); /* assert RST */
@@ -118,7 +118,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 ac5d94c..e8ed321 100644
--- a/drivers/scsi/megaraid.c
+++ b/drivers/scsi/megaraid.c
@@ -1889,13 +1889,13 @@ megaraid_abort(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;
@@ -1912,7 +1912,7 @@ megaraid_reset(struct scsi_cmnd *cmd)
spin_lock_irq(&adapter->lock);
- rval = megaraid_abort_and_reset(adapter, cmd, SCB_RESET);
+ rval = megaraid_abort_and_reset(adapter, NULL, SCB_RESET);
/*
* This is required here to complete any completed requests
@@ -1938,6 +1938,7 @@ megaraid_abort_and_reset(adapter_t *adapter, Scsi_Cmnd *cmd, int aor)
{
struct list_head *pos, *next;
scb_t *scb;
+ int failed = 0;
printk(KERN_WARNING "megaraid: %s cmd=%x <c=%d t=%d l=%d>\n",
(aor == SCB_ABORT)? "ABORTING":"RESET",
@@ -1951,7 +1952,7 @@ megaraid_abort_and_reset(adapter_t *adapter, Scsi_Cmnd *cmd, int aor)
scb = list_entry(pos, scb_t, list);
- if (scb->cmd == cmd) { /* Found command */
+ if (!cmd || scb->cmd == cmd) { /* Found command */
scb->state |= aor;
@@ -1968,7 +1969,7 @@ megaraid_abort_and_reset(adapter_t *adapter, Scsi_Cmnd *cmd, int aor)
(aor==SCB_ABORT) ? "ABORTING":"RESET",
scb->idx);
- return FALSE;
+ failed++;
}
else {
@@ -1993,12 +1994,11 @@ megaraid_abort_and_reset(adapter_t *adapter, Scsi_Cmnd *cmd, int aor)
list_add_tail(SCSI_LIST(cmd),
&adapter->completed_list);
- return TRUE;
}
}
}
- return FALSE;
+ return failed ? FALSE : TRUE;
}
static inline int
@@ -4183,8 +4183,6 @@ static struct scsi_host_template megaraid_template = {
.cmd_per_lun = DEF_CMD_PER_LUN,
.use_clustering = ENABLE_CLUSTERING,
.eh_abort_handler = megaraid_abort,
- .eh_device_reset_handler = megaraid_reset,
- .eh_bus_reset_handler = megaraid_reset,
.eh_host_reset_handler = megaraid_reset,
.no_write_same = 1,
};
diff --git a/drivers/scsi/megaraid.h b/drivers/scsi/megaraid.h
index 508d65e..6fb6adf 100644
--- a/drivers/scsi/megaraid.h
+++ b/drivers/scsi/megaraid.h
@@ -963,7 +963,7 @@ static irqreturn_t megaraid_isr_iomapped(int, void *);
static void mega_free_scb(adapter_t *, scb_t *);
static int megaraid_abort(Scsi_Cmnd *);
-static int megaraid_reset(Scsi_Cmnd *);
+static int megaraid_reset(struct Scsi_Host *);
static int megaraid_abort_and_reset(adapter_t *, Scsi_Cmnd *, int);
static int megaraid_biosparam(struct scsi_device *, struct block_device *,
sector_t, int []);
diff --git a/drivers/scsi/megaraid/megaraid_mbox.c b/drivers/scsi/megaraid/megaraid_mbox.c
index e2237a9..6321d2a 100644
--- a/drivers/scsi/megaraid/megaraid_mbox.c
+++ b/drivers/scsi/megaraid/megaraid_mbox.c
@@ -97,7 +97,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 []);
@@ -362,8 +362,6 @@ static struct scsi_host_template megaraid_template_g = {
.proc_name = "megaraid",
.queuecommand = megaraid_queue_command,
.eh_abort_handler = megaraid_abort_handler,
- .eh_device_reset_handler = megaraid_reset_handler,
- .eh_bus_reset_handler = megaraid_reset_handler,
.eh_host_reset_handler = megaraid_reset_handler,
.change_queue_depth = megaraid_change_queue_depth,
.use_clustering = ENABLE_CLUSTERING,
@@ -2591,7 +2589,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;
@@ -2605,7 +2603,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
@@ -2637,15 +2635,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);
scb->scp->scsi_done(scb->scp);
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index 112799b..697d7ca 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -2291,15 +2291,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 (instance->adprecovery == MEGASAS_HW_CRITICAL_ERROR) {
printk(KERN_ERR "megasas: cannot recover from previous reset "
@@ -2349,28 +2348,13 @@ blk_eh_timer_return megasas_reset_timer(struct scsi_cmnd *scmd)
}
/**
- * megasas_reset_device - Device reset handler entry point
- */
-static int megasas_reset_device(struct scsi_cmnd *scmd)
-{
- int ret;
-
- /*
- * First wait for all commands to complete
- */
- ret = megasas_generic_reset(scmd);
-
- return ret;
-}
-
-/**
* megasas_reset_bus_host - Bus & host reset handler entry point
*/
-static int megasas_reset_bus_host(struct scsi_cmnd *scmd)
+static int megasas_reset_bus_host(struct Scsi_Host *shost)
{
int ret;
struct megasas_instance *instance;
- instance = (struct megasas_instance *)scmd->device->host->hostdata;
+ instance = (struct megasas_instance *)shost->hostdata;
/*
* First wait for all commands to complete
@@ -2379,9 +2363,9 @@ static int megasas_reset_bus_host(struct scsi_cmnd *scmd)
(instance->pdev->device == PCI_DEVICE_ID_LSI_PLASMA) ||
(instance->pdev->device == PCI_DEVICE_ID_LSI_INVADER) ||
(instance->pdev->device == PCI_DEVICE_ID_LSI_FURY))
- ret = megasas_reset_fusion(scmd->device->host, 1);
+ ret = megasas_reset_fusion(shost, 1);
else
- ret = megasas_generic_reset(scmd);
+ ret = megasas_generic_reset(shost);
return ret;
}
@@ -2504,8 +2488,6 @@ static struct scsi_host_template megasas_template = {
.slave_configure = megasas_slave_configure,
.slave_alloc = megasas_slave_alloc,
.queuecommand = megasas_queue_command,
- .eh_device_reset_handler = megasas_reset_device,
- .eh_bus_reset_handler = megasas_reset_bus_host,
.eh_host_reset_handler = megasas_reset_bus_host,
.eh_timed_out = megasas_reset_timer,
.bios_param = megasas_bios_param,
diff --git a/drivers/scsi/mesh.c b/drivers/scsi/mesh.c
index e8a04ae..8c2935d 100644
--- a/drivers/scsi/mesh.c
+++ b/drivers/scsi/mesh.c
@@ -1700,9 +1700,9 @@ static int mesh_abort(struct scsi_cmnd *cmd)
* The midlayer will wait for devices to come back, we don't need
* to do that ourselves
*/
-static int mesh_host_reset(struct scsi_cmnd *cmd)
+static int mesh_host_reset(struct Scsi_Host *shost)
{
- struct mesh_state *ms = (struct mesh_state *) cmd->device->host->hostdata;
+ struct mesh_state *ms = (struct mesh_state *) shost->hostdata;
volatile struct mesh_regs __iomem *mr = ms->mesh;
volatile struct dbdma_regs __iomem *md = ms->dma;
unsigned long flags;
@@ -1716,7 +1716,7 @@ static int mesh_host_reset(struct scsi_cmnd *cmd)
out_8(&mr->exception, 0xff); /* clear all exception bits */
out_8(&mr->error, 0xff); /* clear all error bits */
out_8(&mr->sequence, SEQ_RESETMESH);
- mesh_flush_io(mr);
+ mesh_flush_io(mr);
udelay(1);
out_8(&mr->intr_mask, INT_ERROR | INT_EXCEPTION | INT_CMDDONE);
out_8(&mr->source_id, ms->host->this_id);
@@ -1725,13 +1725,13 @@ static int mesh_host_reset(struct scsi_cmnd *cmd)
/* Reset the bus */
out_8(&mr->bus_status1, BS1_RST); /* assert RST */
- mesh_flush_io(mr);
+ mesh_flush_io(mr);
udelay(30); /* leave it on for >= 25us */
out_8(&mr->bus_status1, 0); /* negate RST */
/* Complete pending commands */
handle_reset(ms);
-
+
spin_unlock_irqrestore(ms->host->host_lock, flags);
return SUCCESS;
}
diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
index 5055f92..ccdbe0c 100644
--- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
+++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
@@ -2769,20 +2769,19 @@ _scsih_target_reset(struct scsi_cmnd *scmd)
* Returns SUCCESS if command aborted else FAILED
*/
static int
-_scsih_host_reset(struct scsi_cmnd *scmd)
+_scsih_host_reset(struct Scsi_Host *shost)
{
- struct MPT2SAS_ADAPTER *ioc = shost_priv(scmd->device->host);
+ struct MPT2SAS_ADAPTER *ioc = shost_priv(shost);
int r, retval;
- printk(MPT2SAS_INFO_FMT "attempting host reset! scmd(%p)\n",
- ioc->name, scmd);
- scsi_print_command(scmd);
+ printk(MPT2SAS_INFO_FMT "attempting host reset!\n",
+ ioc->name);
retval = mpt2sas_base_hard_reset_handler(ioc, CAN_SLEEP,
FORCE_BIG_HAMMER);
r = (retval < 0) ? FAILED : SUCCESS;
- printk(MPT2SAS_INFO_FMT "host reset: %s scmd(%p)\n",
- ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd);
+ printk(MPT2SAS_INFO_FMT "host reset: %s\n",
+ ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"));
return r;
}
diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
index 0274ac3..1daae9e 100644
--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c
+++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c
@@ -2427,20 +2427,19 @@ _scsih_target_reset(struct scsi_cmnd *scmd)
* Returns SUCCESS if command aborted else FAILED
*/
static int
-_scsih_host_reset(struct scsi_cmnd *scmd)
+_scsih_host_reset(struct Scsi_Host *shost)
{
- struct MPT3SAS_ADAPTER *ioc = shost_priv(scmd->device->host);
+ struct MPT3SAS_ADAPTER *ioc = shost_priv(shost);
int r, retval;
- pr_info(MPT3SAS_FMT "attempting host reset! scmd(%p)\n",
- ioc->name, scmd);
- scsi_print_command(scmd);
+ pr_info(MPT3SAS_FMT "attempting host reset!\n",
+ ioc->name);
retval = mpt3sas_base_hard_reset_handler(ioc, CAN_SLEEP,
FORCE_BIG_HAMMER);
r = (retval < 0) ? FAILED : SUCCESS;
- pr_info(MPT3SAS_FMT "host reset: %s scmd(%p)\n",
- ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"), scmd);
+ pr_info(MPT3SAS_FMT "host reset: %s\n",
+ ioc->name, ((r == SUCCESS) ? "SUCCESS" : "FAILED"));
return r;
}
diff --git a/drivers/scsi/mvumi.c b/drivers/scsi/mvumi.c
index edbee8d..9ee3a3c 100644
--- a/drivers/scsi/mvumi.c
+++ b/drivers/scsi/mvumi.c
@@ -723,14 +723,13 @@ static int mvumi_reset_host_9143(struct mvumi_hba *mhba)
return mvumi_wait_for_outstanding(mhba);
}
-static int mvumi_host_reset(struct scsi_cmnd *scmd)
+static int mvumi_host_reset(struct Scsi_Host *shost)
{
struct mvumi_hba *mhba;
- mhba = (struct mvumi_hba *) scmd->device->host->hostdata;
+ mhba = (struct mvumi_hba *) shost->hostdata;
- scmd_printk(KERN_NOTICE, scmd, "RESET -%ld cmd=%x retries=%x\n",
- scmd->serial_number, scmd->cmnd[0], scmd->retries);
+ shost_printk(KERN_NOTICE, shost, "RESET\n");
return mhba->instancet->reset_host(mhba);
}
diff --git a/drivers/scsi/nsp32.c b/drivers/scsi/nsp32.c
index 0665f9c..953d0bc 100644
--- a/drivers/scsi/nsp32.c
+++ b/drivers/scsi/nsp32.c
@@ -202,7 +202,7 @@ static int nsp32_release (struct Scsi_Host *);
/* SCSI error handler */
static int nsp32_eh_abort (struct scsi_cmnd *);
static int nsp32_eh_bus_reset (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 *);
@@ -2909,23 +2909,21 @@ static void nsp32_do_bus_reset(nsp32_hw_data *data)
data->CurrentSC = NULL;
}
-static int nsp32_eh_host_reset(struct scsi_cmnd *SCpnt)
+static int nsp32_eh_host_reset(struct Scsi_Host *host)
{
- struct Scsi_Host *host = SCpnt->device->host;
- unsigned int base = SCpnt->device->host->io_port;
+ unsigned int base = host->io_port;
nsp32_hw_data *data = (nsp32_hw_data *)host->hostdata;
- nsp32_msg(KERN_INFO, "Host Reset");
- nsp32_dbg(NSP32_DEBUG_BUSRESET, "SCpnt=0x%x", SCpnt);
+ nsp32_msg(KERN_INFO, "Host Reset");
- spin_lock_irq(SCpnt->device->host->host_lock);
+ spin_lock_irq(host->host_lock);
nsp32hw_init(data);
nsp32_write2(base, IRQ_CONTROL, IRQ_CONTROL_ALL_IRQ_MASK);
nsp32_do_bus_reset(data);
nsp32_write2(base, IRQ_CONTROL, 0);
- spin_unlock_irq(SCpnt->device->host->host_lock);
+ spin_unlock_irq(host->host_lock);
return SUCCESS; /* Host reset is succeeded at any time. */
}
diff --git a/drivers/scsi/pcmcia/aha152x_stub.c b/drivers/scsi/pcmcia/aha152x_stub.c
index 7d1609f..f95abd9 100644
--- a/drivers/scsi/pcmcia/aha152x_stub.c
+++ b/drivers/scsi/pcmcia/aha152x_stub.c
@@ -197,7 +197,7 @@ static int aha152x_resume(struct pcmcia_device *link)
{
scsi_info_t *info = link->priv;
- aha152x_host_reset_host(info->host);
+ aha152x_host_reset(info->host);
return 0;
}
diff --git a/drivers/scsi/pcmcia/nsp_cs.c b/drivers/scsi/pcmcia/nsp_cs.c
index 987fbb1..e8136b1 100644
--- a/drivers/scsi/pcmcia/nsp_cs.c
+++ b/drivers/scsi/pcmcia/nsp_cs.c
@@ -1490,9 +1490,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/sym53c500_cs.c b/drivers/scsi/pcmcia/sym53c500_cs.c
index f5b5273..3d174a5 100644
--- a/drivers/scsi/pcmcia/sym53c500_cs.c
+++ b/drivers/scsi/pcmcia/sym53c500_cs.c
@@ -586,14 +586,14 @@ SYM53C500_queue_lck(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
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 017f8b9..4e274f9 100644
--- a/drivers/scsi/pmcraid.c
+++ b/drivers/scsi/pmcraid.c
@@ -3150,12 +3150,12 @@ static int pmcraid_eh_target_reset_handler(struct scsi_cmnd *scmd)
* 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 1db8b26..b542fe4 100644
--- a/drivers/scsi/ppa.c
+++ b/drivers/scsi/ppa.c
@@ -856,11 +856,11 @@ static void ppa_reset_pulse(unsigned int base)
w_ctr(base, 0xc);
}
-static int ppa_reset(struct scsi_cmnd *cmd)
+static int ppa_reset(struct Scsi_Host *shost)
{
- ppa_struct *dev = ppa_dev(cmd->device->host);
+ ppa_struct *dev = ppa_dev(shost);
- if (cmd->SCp.phase)
+ if (dev->cur_cmd->SCp.phase)
ppa_disconnect(dev);
dev->cur_cmd = NULL; /* Forget the problem */
@@ -969,7 +969,6 @@ static struct scsi_host_template ppa_template = {
.name = "Iomega VPI0 (ppa) interface",
.queuecommand = ppa_queuecommand,
.eh_abort_handler = ppa_abort,
- .eh_bus_reset_handler = ppa_reset,
.eh_host_reset_handler = ppa_reset,
.bios_param = ppa_biosparam,
.this_id = -1,
diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c
index 1580205..4bea9b9d 100644
--- a/drivers/scsi/qla1280.c
+++ b/drivers/scsi/qla1280.c
@@ -1047,13 +1047,28 @@ 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_qla_host *ha = (struct scsi_qla_host *)shost->hostdata;
- spin_lock_irq(cmd->device->host->host_lock);
- rc = qla1280_error_action(cmd, ADAPTER_RESET);
- spin_unlock_irq(cmd->device->host->host_lock);
+ spin_lock_irq(shost->host_lock);
+ if (qla1280_verbose) {
+ printk(KERN_INFO
+ "scsi(%ld): Issued ADAPTER RESET\n",
+ ha->host_no);
+ printk(KERN_INFO "scsi(%ld): I/O processing will "
+ "continue automatically\n", ha->host_no);
+ }
+ ha->flags.reset_active = 1;
+
+ if (qla1280_abort_isp(ha) != 0) { /* it's dead */
+ rc = FAILED;
+ }
+
+ ha->flags.reset_active = 0;
+
+ spin_unlock_irq(shost->host_lock);
return rc;
}
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index cd30445..96ff099 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -234,7 +234,7 @@ static int qla2xxx_eh_abort(struct scsi_cmnd *);
static int qla2xxx_eh_device_reset(struct scsi_cmnd *);
static int qla2xxx_eh_target_reset(struct scsi_cmnd *);
static int qla2xxx_eh_bus_reset(struct scsi_cmnd *);
-static int qla2xxx_eh_host_reset(struct scsi_cmnd *);
+static int qla2xxx_eh_host_reset(struct Scsi_Host *);
static int qla2x00_change_queue_depth(struct scsi_device *, int, int);
static int qla2x00_change_queue_type(struct scsi_device *, int);
@@ -1222,20 +1222,15 @@ eh_bus_reset_done:
* 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);
- 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
@@ -1281,8 +1276,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 c5d9564..62706dd 100644
--- a/drivers/scsi/qla4xxx/ql4_os.c
+++ b/drivers/scsi/qla4xxx/ql4_os.c
@@ -160,7 +160,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 int qla4xxx_slave_configure(struct scsi_device *device);
static void qla4xxx_slave_destroy(struct scsi_device *sdev);
@@ -9412,12 +9412,12 @@ static int qla4xxx_is_eh_active(struct Scsi_Host *shost)
* This routine is invoked by the Linux kernel to perform fatal error
* recovery on the specified adapter.
**/
-static int qla4xxx_eh_host_reset(struct scsi_cmnd *cmd)
+static int qla4xxx_eh_host_reset(struct Scsi_Host *host)
{
int return_status = FAILED;
struct scsi_qla_host *ha;
- ha = to_qla_host(cmd->device->host);
+ ha = to_qla_host(host);
if ((is_qla8032(ha) || is_qla8042(ha)) && ql4xdontresethba)
qla4_83xx_set_idc_dontreset(ha);
@@ -9433,20 +9433,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/scsi_debug.c b/drivers/scsi/scsi_debug.c
index 6ed43fd..ae7e1ae 100644
--- a/drivers/scsi/scsi_debug.c
+++ b/drivers/scsi/scsi_debug.c
@@ -2614,7 +2614,7 @@ 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 * dev_info;
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index e4a5324..ff069780 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -765,7 +765,7 @@ static int scsi_try_host_reset(struct scsi_cmnd *scmd)
if (!hostt->eh_host_reset_handler)
return FAILED;
- rtn = hostt->eh_host_reset_handler(scmd);
+ rtn = hostt->eh_host_reset_handler(host);
if (rtn == SUCCESS) {
if (!hostt->skip_settle_delay)
diff --git a/drivers/scsi/sgiwd93.c b/drivers/scsi/sgiwd93.c
index a464d95..9ceb12c 100644
--- a/drivers/scsi/sgiwd93.c
+++ b/drivers/scsi/sgiwd93.c
@@ -192,20 +192,6 @@ static inline void init_hpc_chain(struct ip22_hostdata *hdata)
hcp->desc.pnext = hdata->dma;
}
-static int sgiwd93_bus_reset(struct scsi_cmnd *cmd)
-{
- /* FIXME perform bus-specific reset */
-
- /* FIXME 2: kill this function, and let midlayer fallback
- to the same result, calling wd33c93_host_reset() */
-
- spin_lock_irq(cmd->device->host->host_lock);
- wd33c93_host_reset(cmd);
- spin_unlock_irq(cmd->device->host->host_lock);
-
- return SUCCESS;
-}
-
/*
* Kludge alert - the SCSI code calls the abort and reset method with int
* arguments not with pointers. So this is going to blow up beautyfully
@@ -217,7 +203,6 @@ static struct scsi_host_template sgiwd93_template = {
.name = "SGI WD93",
.queuecommand = wd33c93_queuecommand,
.eh_abort_handler = wd33c93_abort,
- .eh_bus_reset_handler = sgiwd93_bus_reset,
.eh_host_reset_handler = wd33c93_host_reset,
.can_queue = 16,
.this_id = 7,
diff --git a/drivers/scsi/stex.c b/drivers/scsi/stex.c
index 1aa4bef..2868f80 100644
--- a/drivers/scsi/stex.c
+++ b/drivers/scsi/stex.c
@@ -1346,15 +1346,14 @@ 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];
printk(KERN_INFO DRV_NAME
"(%s): resetting host\n", pci_name(hba->pdev));
- scsi_print_command(cmd);
return stex_do_reset(hba) ? FAILED : SUCCESS;
}
diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 9969fa1..9b59609 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -1467,9 +1467,9 @@ static int storvsc_get_chs(struct scsi_device *sdev, struct block_device * bdev,
return 0;
}
-static int storvsc_host_reset_handler(struct scsi_cmnd *scmnd)
+static int storvsc_host_reset_handler(struct Scsi_Host *shost)
{
- struct hv_host_device *host_dev = shost_priv(scmnd->device->host);
+ struct hv_host_device *host_dev = shost_priv(shost);
struct hv_device *device = host_dev->dev;
struct storvsc_device *stor_device;
diff --git a/drivers/scsi/sym53c416.c b/drivers/scsi/sym53c416.c
index 0b7819f..3e8a615 100644
--- a/drivers/scsi/sym53c416.c
+++ b/drivers/scsi/sym53c416.c
@@ -762,17 +762,17 @@ static int sym53c416_queuecommand_lck(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *
DEF_SCSI_QCMD(sym53c416_queuecommand)
-static int sym53c416_host_reset(Scsi_Cmnd *SCpnt)
+static int sym53c416_host_reset(struct Scsi_Host *shost)
{
int base;
- int scsi_id = -1;
+ int scsi_id = -1;
int i;
unsigned long flags;
spin_lock_irqsave(&sym53c416_lock, flags);
/* printk("sym53c416_reset\n"); */
- base = SCpnt->device->host->io_port;
+ base = shost->io_port;
/* search scsi_id - fixme, we shouldn't need to iterate for this! */
for(i = 0; i < host_index && scsi_id == -1; i++)
if(hosts[i].base == base)
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c
index e59e6f9..645eb0f 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.c
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.c
@@ -588,10 +588,10 @@ static void sym53c8xx_timer(unsigned long npref)
* Generic method for our eh processing.
* The 'op' argument tells what we have to do.
*/
-static int sym_eh_handler(int op, char *opname, struct scsi_cmnd *cmd)
+static int sym_eh_handler(int op, char *opname,
+ struct Scsi_Host *shost, struct scsi_cmnd *cmd)
{
struct sym_ucmd *ucmd = SYM_UCMD_PTR(cmd);
- 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;
@@ -600,7 +600,12 @@ static int sym_eh_handler(int op, char *opname, struct scsi_cmnd *cmd)
int sts = -1;
struct completion eh_done;
- scmd_printk(KERN_WARNING, cmd, "%s operation started\n", opname);
+ if (cmd)
+ scmd_printk(KERN_WARNING, cmd, "%s operation started\n",
+ opname);
+ else
+ shost_printk(KERN_WARNING, shost, "%s operation started\n",
+ opname);
/* We may be in an error condition because the PCI bus
* went down. In this case, we need to wait until the
@@ -634,11 +639,14 @@ static int sym_eh_handler(int op, char *opname, struct scsi_cmnd *cmd)
spin_lock_irq(shost->host_lock);
/* This one is queued in some place -> to wait for completion */
- FOR_EACH_QUEUED_ELEMENT(&np->busy_ccbq, qp) {
- struct sym_ccb *cp = sym_que_entry(qp, struct sym_ccb, link_ccbq);
- if (cp->cmd == cmd) {
- cmd_queued = 1;
- break;
+ if (cmd) {
+ FOR_EACH_QUEUED_ELEMENT(&np->busy_ccbq, qp) {
+ struct sym_ccb *cp = sym_que_entry(qp, struct sym_ccb,
+ link_ccbq);
+ if (cp->cmd == cmd) {
+ cmd_queued = 1;
+ break;
+ }
}
}
@@ -680,8 +688,15 @@ static int sym_eh_handler(int op, char *opname, struct scsi_cmnd *cmd)
spin_unlock_irq(shost->host_lock);
}
- dev_warn(&cmd->device->sdev_gendev, "%s operation %s.\n", opname,
- sts==0 ? "complete" :sts==-2 ? "timed-out" : "failed");
+ if (cmd)
+ scmd_printk(KERN_WARNING, cmd, "%s operation %s.\n", opname,
+ sts==0 ? "complete" :
+ sts==-2 ? "timed-out" : "failed");
+ else
+ shost_printk(KERN_WARNING, shost, "%s operation %s.\n", opname,
+ sts==0 ? "complete" :
+ sts==-2 ? "timed-out" : "failed");
+
return sts ? SCSI_FAILED : SCSI_SUCCESS;
}
@@ -691,22 +706,24 @@ static int sym_eh_handler(int op, char *opname, struct scsi_cmnd *cmd)
*/
static int sym53c8xx_eh_abort_handler(struct scsi_cmnd *cmd)
{
- return sym_eh_handler(SYM_EH_ABORT, "ABORT", cmd);
+ return sym_eh_handler(SYM_EH_ABORT, "ABORT", cmd->device->host, cmd);
}
static int sym53c8xx_eh_device_reset_handler(struct scsi_cmnd *cmd)
{
- return sym_eh_handler(SYM_EH_DEVICE_RESET, "DEVICE RESET", cmd);
+ return sym_eh_handler(SYM_EH_DEVICE_RESET, "DEVICE RESET",
+ cmd->device->host, cmd);
}
static int sym53c8xx_eh_bus_reset_handler(struct scsi_cmnd *cmd)
{
- return sym_eh_handler(SYM_EH_BUS_RESET, "BUS RESET", cmd);
+ return sym_eh_handler(SYM_EH_BUS_RESET, "BUS RESET",
+ cmd->device->host, cmd);
}
-static int sym53c8xx_eh_host_reset_handler(struct scsi_cmnd *cmd)
+static int sym53c8xx_eh_host_reset_handler(struct Scsi_Host *shost)
{
- return sym_eh_handler(SYM_EH_HOST_RESET, "HOST RESET", cmd);
+ return sym_eh_handler(SYM_EH_HOST_RESET, "HOST RESET", shost, NULL);
}
/*
diff --git a/drivers/scsi/u14-34f.c b/drivers/scsi/u14-34f.c
index 5a03bb3..773b811 100644
--- a/drivers/scsi/u14-34f.c
+++ b/drivers/scsi/u14-34f.c
@@ -434,7 +434,7 @@ static int u14_34f_detect(struct scsi_host_template *);
static int u14_34f_release(struct Scsi_Host *);
static int u14_34f_queuecommand(struct Scsi_Host *, struct scsi_cmnd *);
static int u14_34f_eh_abort(struct scsi_cmnd *);
-static int u14_34f_eh_host_reset(struct scsi_cmnd *);
+static int u14_34f_eh_host_reset(struct Scsi_Host *);
static int u14_34f_bios_param(struct scsi_device *, struct block_device *,
sector_t, int *);
static int u14_34f_slave_configure(struct scsi_device *);
@@ -1392,20 +1392,15 @@ static int u14_34f_eh_abort(struct scsi_cmnd *SCarg) {
panic("%s: abort, mbox %d, invalid cp_stat.\n", BN(j), i);
}
-static int u14_34f_eh_host_reset(struct scsi_cmnd *SCarg) {
+static int u14_34f_eh_host_reset(struct Scsi_Host *shost) {
unsigned int i, j, k, c, limit = 0;
unsigned long time;
- int arg_done = FALSE;
- struct scsi_cmnd *SCpnt;
- j = ((struct hostdata *) SCarg->device->host->hostdata)->board_number;
- scmd_printk(KERN_INFO, SCarg, "reset, enter.\n");
+ j = ((struct hostdata *) shost->hostdata)->board_number;
+ shost_printk(KERN_INFO, shost, "reset, enter.\n");
spin_lock_irq(sh[j]->host_lock);
- if (SCarg->host_scribble == NULL)
- printk("%s: reset, inactive.\n", BN(j));
-
if (HD(j)->in_reset) {
printk("%s: reset, exit, already in reset.\n", BN(j));
spin_unlock_irq(sh[j]->host_lock);
@@ -1458,7 +1453,6 @@ static int u14_34f_eh_host_reset(struct scsi_cmnd *SCarg) {
if (SCpnt->scsi_done == NULL)
panic("%s: reset, mbox %d, SCpnt->scsi_done == NULL.\n", BN(j), i);
- if (SCpnt == SCarg) arg_done = TRUE;
}
if (wait_on_busy(sh[j]->io_port, MAXLOOP)) {
@@ -1520,8 +1514,7 @@ static int u14_34f_eh_host_reset(struct scsi_cmnd *SCarg) {
HD(j)->in_reset = FALSE;
do_trace = FALSE;
- if (arg_done) printk("%s: reset, exit, done.\n", BN(j));
- else printk("%s: reset, exit.\n", BN(j));
+ printk("%s: reset, exit.\n", BN(j));
spin_unlock_irq(sh[j]->host_lock);
return SUCCESS;
diff --git a/drivers/scsi/ultrastor.c b/drivers/scsi/ultrastor.c
index 14e0c40..406299c 100644
--- a/drivers/scsi/ultrastor.c
+++ b/drivers/scsi/ultrastor.c
@@ -969,18 +969,17 @@ static int ultrastor_abort(struct scsi_cmnd *SCpnt)
return SUCCESS;
}
-static int ultrastor_host_reset(struct scsi_cmnd * SCpnt)
+static int ultrastor_host_reset(struct Scsi_Host * host)
{
unsigned long flags;
int i;
- struct Scsi_Host *host = SCpnt->device->host;
-
+
#if (ULTRASTOR_DEBUG & UD_RESET)
printk("US14F: reset: called\n");
#endif
if(config.slot)
- return FAILED;
+ return FAILED;
spin_lock_irqsave(host->host_lock, flags);
/* Reset the adapter and SCSI bus. The SCSI bus reset can be
diff --git a/drivers/scsi/vmw_pvscsi.c b/drivers/scsi/vmw_pvscsi.c
index c88e146..a82d3d5 100644
--- a/drivers/scsi/vmw_pvscsi.c
+++ b/drivers/scsi/vmw_pvscsi.c
@@ -868,14 +868,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 41883a8..b9fb855 100644
--- a/drivers/scsi/wd33c93.c
+++ b/drivers/scsi/wd33c93.c
@@ -1570,16 +1570,14 @@ 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;
hostdata = (struct WD33C93_hostdata *) instance->hostdata;
- printk("scsi%d: reset. ", instance->host_no);
+ shost_printk(KERN_INFO, instance, "reset. ");
disable_irq(instance->irq);
hostdata->dma_stop(instance, NULL, 0);
@@ -1600,7 +1598,6 @@ wd33c93_host_reset(struct scsi_cmnd * SCpnt)
hostdata->outgoing_len = 0;
reset_wd33c93(instance);
- SCpnt->result = DID_RESET << 16;
enable_irq(instance->irq);
return SUCCESS;
}
diff --git a/drivers/scsi/wd33c93.h b/drivers/scsi/wd33c93.h
index 08abe50..4d2d3cb 100644
--- a/drivers/scsi/wd33c93.h
+++ b/drivers/scsi/wd33c93.h
@@ -347,6 +347,6 @@ 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/wd7000.c b/drivers/scsi/wd7000.c
index 3267423..91ad166 100644
--- a/drivers/scsi/wd7000.c
+++ b/drivers/scsi/wd7000.c
@@ -1568,20 +1568,20 @@ static int wd7000_abort(Scsi_Cmnd * SCpnt)
* Last resort. Reinitialize the board.
*/
-static int wd7000_host_reset(struct scsi_cmnd *SCpnt)
+static int wd7000_host_reset(struct Scsi_Host *shost)
{
- Adapter *host = (Adapter *) SCpnt->device->host->hostdata;
+ Adapter *host = (Adapter *) shost->hostdata;
- spin_lock_irq(SCpnt->device->host->host_lock);
+ spin_lock_irq(shost->host_lock);
if (wd7000_adapter_reset(host) < 0) {
- spin_unlock_irq(SCpnt->device->host->host_lock);
+ spin_unlock_irq(shost->host_lock);
return FAILED;
}
wd7000_enable_intr(host);
- spin_unlock_irq(SCpnt->device->host->host_lock);
+ spin_unlock_irq(shost->host_lock);
return SUCCESS;
}
diff --git a/drivers/usb/image/microtek.c b/drivers/usb/image/microtek.c
index 37b44b0..d8c26fd 100644
--- a/drivers/usb/image/microtek.c
+++ b/drivers/usb/image/microtek.c
@@ -346,9 +346,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 52beadf..e5d348f 100644
--- a/include/scsi/libfc.h
+++ b/include/scsi/libfc.h
@@ -1103,7 +1103,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 *);
int fc_change_queue_depth(struct scsi_device *, int qdepth, int reason);
int fc_change_queue_type(struct scsi_device *, int tag_type);
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index abb6958..95a8cbd 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -174,7 +174,7 @@ struct scsi_host_template {
int (* eh_device_reset_handler)(struct scsi_cmnd *);
int (* eh_target_reset_handler)(struct scsi_cmnd *);
int (* eh_bus_reset_handler)(struct scsi_cmnd *);
- int (* eh_host_reset_handler)(struct scsi_cmnd *);
+ int (* eh_host_reset_handler)(struct Scsi_Host *);
/*
* Before the mid layer attempts to scan for a new device where none
--
1.7.12.4
next prev parent reply other threads:[~2014-06-27 6:27 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-27 6:26 [PATCH 0/7] Use 'Scsi_Host' as argument for host reset Hannes Reinecke
2014-06-27 6:26 ` [PATCH 1/7] scsi: fix comment in scsi_device_set_state() Hannes Reinecke
2014-06-27 6:27 ` [PATCH 2/7] mptfc: Do not call fc_block_scsi_eh() on host reset Hannes Reinecke
2014-06-27 6:27 ` [PATCH 3/7] ibmvfc: " Hannes Reinecke
2014-06-27 6:27 ` [PATCH 4/7] libfc: " Hannes Reinecke
2014-06-27 6:27 ` [PATCH 5/7] scsi_transport_fc: Use fc_rport as argument for fc_block_scsi_eh Hannes Reinecke
2014-06-27 12:46 ` Steffen Maier
2014-06-27 6:27 ` Hannes Reinecke [this message]
2014-06-27 10:47 ` [PATCH 6/7] scsi: Use Scsi_Host as argument for eh_host_reset_handler Steffen Maier
2014-06-27 11:04 ` Hannes Reinecke
2014-06-27 11:52 ` Martin Peschke
2014-06-27 12:00 ` Hannes Reinecke
2014-06-27 14:41 ` Steffen Maier
2014-06-27 17:52 ` Hannes Reinecke
2014-06-27 6:27 ` [PATCH 7/7] scsi_error: do not use command list for host reset Hannes Reinecke
2014-06-27 7:06 ` Bart Van Assche
2014-06-27 7:58 ` Christoph Hellwig
2014-06-27 10:42 ` Steffen Maier
2014-06-27 7:59 ` [PATCH 0/7] Use 'Scsi_Host' as argument " Christoph Hellwig
2014-06-27 8:14 ` Hannes Reinecke
2014-06-27 8:15 ` Christoph Hellwig
2014-09-07 16:21 ` Christoph Hellwig
2014-09-08 6:49 ` Hannes Reinecke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1403850425-89297-7-git-send-email-hare@suse.de \
--to=hare@suse.de \
--cc=hch@infradead.org \
--cc=jbottomley@parallels.com \
--cc=linux-scsi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.