[PATCH] move ->eh_strategy_handler to the transport class
Overriding the whole EH code is a per-transport, not per-host thing. Move ->eh_strategy_handler to the transport class, same as ->eh_timed_out. Downside is that scsi_host_alloc can't check for the total lack of EH anymore, but the transition period from old EH where we needed it is long gone already. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:

gecommit door
Jeff Garzik

bovenliggende
676165a8af
commit
9227c33de8
@@ -19,9 +19,9 @@ TABLE OF CONTENTS
|
||||
[2-1-1] Overview
|
||||
[2-1-2] Flow of scmds through EH
|
||||
[2-1-3] Flow of control
|
||||
[2-2] EH through hostt->eh_strategy_handler()
|
||||
[2-2-1] Pre hostt->eh_strategy_handler() SCSI midlayer conditions
|
||||
[2-2-2] Post hostt->eh_strategy_handler() SCSI midlayer conditions
|
||||
[2-2] EH through transportt->eh_strategy_handler()
|
||||
[2-2-1] Pre transportt->eh_strategy_handler() SCSI midlayer conditions
|
||||
[2-2-2] Post transportt->eh_strategy_handler() SCSI midlayer conditions
|
||||
[2-2-3] Things to consider
|
||||
|
||||
|
||||
@@ -413,9 +413,9 @@ scmd->allowed.
|
||||
layer of failure of the scmds.
|
||||
|
||||
|
||||
[2-2] EH through hostt->eh_strategy_handler()
|
||||
[2-2] EH through transportt->eh_strategy_handler()
|
||||
|
||||
hostt->eh_strategy_handler() is invoked in the place of
|
||||
transportt->eh_strategy_handler() is invoked in the place of
|
||||
scsi_unjam_host() and it is responsible for whole recovery process.
|
||||
On completion, the handler should have made lower layers forget about
|
||||
all failed scmds and either ready for new commands or offline. Also,
|
||||
@@ -424,7 +424,7 @@ SCSI midlayer. IOW, of the steps described in [2-1-2], all steps
|
||||
except for #1 must be implemented by eh_strategy_handler().
|
||||
|
||||
|
||||
[2-2-1] Pre hostt->eh_strategy_handler() SCSI midlayer conditions
|
||||
[2-2-1] Pre transportt->eh_strategy_handler() SCSI midlayer conditions
|
||||
|
||||
The following conditions are true on entry to the handler.
|
||||
|
||||
@@ -437,7 +437,7 @@ except for #1 must be implemented by eh_strategy_handler().
|
||||
- shost->host_failed == shost->host_busy
|
||||
|
||||
|
||||
[2-2-2] Post hostt->eh_strategy_handler() SCSI midlayer conditions
|
||||
[2-2-2] Post transportt->eh_strategy_handler() SCSI midlayer conditions
|
||||
|
||||
The following conditions must be true on exit from the handler.
|
||||
|
||||
|
@@ -804,7 +804,6 @@ Summary:
|
||||
eh_bus_reset_handler - issue SCSI bus reset
|
||||
eh_device_reset_handler - issue SCSI device reset
|
||||
eh_host_reset_handler - reset host (host bus adapter)
|
||||
eh_strategy_handler - driver supplied alternate to scsi_unjam_host()
|
||||
info - supply information about given host
|
||||
ioctl - driver can respond to ioctls
|
||||
proc_info - supports /proc/scsi/{driver_name}/{host_no}
|
||||
@@ -969,24 +968,6 @@ Details:
|
||||
int eh_host_reset_handler(struct scsi_cmnd * scp)
|
||||
|
||||
|
||||
/**
|
||||
* eh_strategy_handler - driver supplied alternate to scsi_unjam_host()
|
||||
* @shp: host on which error has occurred
|
||||
*
|
||||
* Returns TRUE if host unjammed, else FALSE.
|
||||
*
|
||||
* Locks: none
|
||||
*
|
||||
* Calling context: kernel thread
|
||||
*
|
||||
* Notes: Invoked from scsi_eh thread. LLD supplied alternate to
|
||||
* scsi_unjam_host() found in scsi_error.c
|
||||
*
|
||||
* Optionally defined in: LLD
|
||||
**/
|
||||
int eh_strategy_handler(struct Scsi_Host * shp)
|
||||
|
||||
|
||||
/**
|
||||
* info - supply information about given host: driver name plus data
|
||||
* to distinguish given host
|
||||
|
Verwijs in nieuw issue
Block a user