linux-stable/drivers/scsi
Mike Christie a4dfaa6f2e [SCSI] scsi: add transport host byte errors (v3)
Currently, if there is a transport problem the iscsi drivers will return
outstanding commands (commands being exeucted by the driver/fw/hw) with
DID_BUS_BUSY and block the session so no new commands can be queued.
Commands that are caught between the failure handling and blocking are
failed with DID_IMM_RETRY or one of the scsi ml queuecommand return values.
When the recovery_timeout fires, the iscsi drivers then fail IO with
DID_NO_CONNECT.

For fcp, some drivers will fail some outstanding IO (disk but possibly not
tape) with DID_BUS_BUSY or DID_ERROR or some other value that causes a retry
and hits the scsi_error.c failfast check, block the rport, and commands
caught in the race are failed with DID_IMM_RETRY. Other drivers, may
hold onto all IO and wait for the terminate_rport_io or dev_loss_tmo_callbk
to be called.

The following patches attempt to unify what upper layers will see drivers
like multipath can make a good guess. This relies on drivers being
hooked into their transport class.

This first patch just defines two new host byte errors so drivers can
return the same value for when a rport/session is blocked and for
when the fast_io_fail_tmo fires.

The idea is that if the LLD/class detects a problem and is going to block
a rport/session, then if the LLD wants or must return the command to scsi-ml,
then it can return it with DID_TRANSPORT_DISRUPTED. This will requeue
the IO into the same scsi queue it came from, until the fast io fail timer
fires and the class decides what to do.

When using multipath and the fast_io_fail_tmo fires then the class
can fail commands with DID_TRANSPORT_FAILFAST or drivers can use
DID_TRANSPORT_FAILFAST in their terminate_rport_io callbacks or
the equivlent in iscsi if we ever implement more advanced recovery methods.
A LLD, like lpfc, could continue to return DID_ERROR and then it will hit
the normal failfast path, so drivers do not have fully be ported to
work better. The point of the patches is that upper layers will
not see a failure that could be recovered from while the rport/session is
blocked until fast_io_fail_tmo/recovery_timeout fires.

V3
Remove some comments.
V2
Fixed patch/diff errors and renamed DID_TRANSPORT_BLOCKED to
DID_TRANSPORT_DISRUPTED.
V1
initial patch.

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
2008-10-13 09:28:48 -04:00
..
aacraid block: unify request timeout handling 2008-10-09 08:56:13 +02:00
aic7xxx scsi: fix integer as NULL pointer warnings 2008-04-28 17:31:13 -07:00
aic7xxx_old
aic94xx [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
arcmsr SCSI: convert struct class_device to struct device 2008-04-19 19:10:33 -07:00
arm [ARM] Move include/asm-arm/arch-* to arch/arm/*/include/mach 2008-08-07 09:55:48 +01:00
device_handler [SCSI] scsi_dh: suppress comparison warning 2008-10-03 12:11:51 -05:00
dpt removed unused #include <linux/version.h>'s 2008-08-23 12:14:12 -07:00
ibmvscsi [SCSI] ibmvfc, qla2xxx, lpfc: remove scsi_target_unblock calls in terminate callbacks 2008-10-13 09:28:48 -04:00
libsas Merge branch 'for-2.6.28' of git://git.kernel.dk/linux-2.6-block 2008-10-10 10:52:45 -07:00
lpfc [SCSI] ibmvfc, qla2xxx, lpfc: remove scsi_target_unblock calls in terminate callbacks 2008-10-13 09:28:48 -04:00
megaraid block: unify request timeout handling 2008-10-09 08:56:13 +02:00
pcmcia removed unused #include <linux/version.h>'s 2008-08-23 12:14:12 -07:00
qla2xxx [SCSI] ibmvfc, qla2xxx, lpfc: remove scsi_target_unblock calls in terminate callbacks 2008-10-13 09:28:48 -04:00
qla4xxx [SCSI] qla4xxx: return SCSI_MLQUEUE_TARGET_BUSY when driver has detected session error 2008-10-13 09:28:46 -04:00
sym53c8xx_2 block: unify request timeout handling 2008-10-09 08:56:13 +02:00
.gitignore
3w-9xxx.c [SCSI] 3w-9xxx: add MSI support and misc fixes 2008-07-26 15:15:00 -04:00
3w-9xxx.h [SCSI] 3w-9xxx: add MSI support and misc fixes 2008-07-26 15:15:00 -04:00
3w-xxxx.c Add a bunch of cycle_kernel_lock() calls 2008-06-20 14:05:53 -06:00
3w-xxxx.h
53c700.c [SCSI] Let scsi_cmnd->cmnd use request->cmd buffer 2008-05-02 10:18:22 -05:00
53c700.h
53c700.scr
53c700_d.h_shipped
a100u2w.c Don't crash on IOMMU overflow in A100U2W driver 2008-07-15 14:30:56 -07:00
a100u2w.h
a2091.c [SCSI] wd33c93: fix up cut and paste error 2008-04-07 12:19:07 -05:00
a2091.h
a3000.c [SCSI] WD33C93: let platform stub override no_sync/fast/dma_mode 2008-04-07 12:19:01 -05:00
a3000.h
a4000t.c
advansys.c [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
aha152x.c [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
aha152x.h
aha1542.c [SCSI] aha1542: minor irq handler cleanups 2008-04-27 12:19:55 -05:00
aha1542.h
aha1740.c [SCSI] remove use_sg_chaining 2008-01-30 13:14:02 -06:00
aha1740.h
aic7xxx_old.c Remove pointless casts from void pointers 2008-02-06 10:41:01 -08:00
atari_dma_emul.c
atari_NCR5380.c [SCSI] atari_NCR5380, sun3_NCR5380: operator precedence fix 2008-01-11 18:28:57 -06:00
atari_scsi.c
atari_scsi.h
atp870u.c scsi: fix integer as NULL pointer warning 2008-05-23 08:11:07 -07:00
atp870u.h
BusLogic.c [SCSI] BusLogic: make FlashPoint support x86-32 only 2008-04-07 12:15:44 -05:00
BusLogic.h [SCSI] BusLogic: make FlashPoint support x86-32 only 2008-04-07 12:15:44 -05:00
bvme6000_scsi.c
ch.c [SCSI] ch: fix ch_remove oops 2008-07-26 15:17:47 -04:00
constants.c [SCSI] scsi: add transport host byte errors (v3) 2008-10-13 09:28:48 -04:00
dc395x.c [SCSI] Remove random noop unchecked_isa_dma users 2008-04-07 12:15:40 -05:00
dc395x.h
dmx3191d.c
dpt_i2o.c device create: scsi: convert device_create to device_create_drvdata 2008-07-21 21:54:44 -07:00
dpti.h drivers/scsi/dpt_i2o.c: fix build on alpha 2008-05-08 10:46:56 -07:00
dtc.c
dtc.h
eata.c [SCSI] aha152x, eata, u14-34f: minor irq handler cleanups 2008-04-25 09:52:30 -05:00
eata_generic.h
eata_pio.c [SCSI] Remove random noop unchecked_isa_dma users 2008-04-07 12:15:40 -05:00
eata_pio.h
esp_scsi.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2008-07-15 18:58:04 -07:00
esp_scsi.h sparc: Kill SBUS DVMA layer. 2008-08-29 02:13:10 -07:00
fd_mcs.c
fdomain.c scsi: fix integer as NULL pointer warnings 2008-04-28 17:31:13 -07:00
fdomain.h
FlashPoint.c [SCSI] FlashPoint: fix off-by-one errors 2008-04-27 12:19:55 -05:00
g_NCR5380.c
g_NCR5380.h
g_NCR5380_mmio.c
gdth.c block: unify request timeout handling 2008-10-09 08:56:13 +02:00
gdth.h block: unify request timeout handling 2008-10-09 08:56:13 +02:00
gdth_ioctl.h
gdth_proc.c block: unify request timeout handling 2008-10-09 08:56:13 +02:00
gdth_proc.h block: unify request timeout handling 2008-10-09 08:56:13 +02:00
gvp11.c [SCSI] wd33c93: fix up cut and paste error 2008-04-07 12:19:07 -05:00
gvp11.h
hosts.c [SCSI] scsi_host_lookup: error returns and NULL pointers 2008-10-03 11:46:12 -05:00
hptiop.c remove unnecessary <linux/hdreg.h> includes 2008-08-05 18:16:58 +02:00
hptiop.h [SCSI] hptiop: add more adapter models and other fixes 2008-01-11 18:28:06 -06:00
ibmmca.c [SCSI] remove use_sg_chaining 2008-01-30 13:14:02 -06:00
ide-scsi.c ide: Remove ide_spin_wait_hwgroup() and use special requests instead 2008-10-10 22:39:40 +02:00
imm.c [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
imm.h
in2000.c [SCSI] in2000: convert to accessors and !use_sg cleanup 2008-01-11 18:22:36 -06:00
in2000.h
initio.c [SCSI] Let scsi_cmnd->cmnd use request->cmd buffer 2008-05-02 10:18:22 -05:00
initio.h
ipr.c block: unify request timeout handling 2008-10-09 08:56:13 +02:00
ipr.h [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
ips.c block: unify request timeout handling 2008-10-09 08:56:13 +02:00
ips.h removed unused #include <linux/version.h>'s 2008-08-23 12:14:12 -07:00
iscsi_tcp.c [SCSI] libiscsi, iscsi_tcp, ib_iser: fix setting of can_queue with old tools. 2008-07-12 08:22:29 -05:00
iscsi_tcp.h [SCSI] iscsi_tcp: handle iscsi_cmd_task rename 2008-07-12 08:22:20 -05:00
jazz_esp.c [SCSI] jazz_esp, sgiwd93, sni_53c710, sun3x_esp: fix platform driver hotplug/coldplug 2008-04-27 12:33:04 -05:00
Kconfig [SCSI] qla2xxx: remove the unused SCSI_QLOGIC_FC_FIRMWARE option 2008-10-03 12:11:51 -05:00
lasi700.c
libiscsi.c [SCSI] libiscsi: Use SCSI_MLQUEUE_TARGET_BUSY 2008-10-13 09:28:47 -04:00
libsrp.c [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
mac53c94.c [SCSI] remove use_sg_chaining 2008-01-30 13:14:02 -06:00
mac53c94.h
mac_esp.c MODULE_LICENSE expects "GPL v2", not "GPLv2" 2008-05-21 16:56:00 -07:00
mac_scsi.c [SCSI] Remove random noop unchecked_isa_dma users 2008-04-07 12:15:40 -05:00
mac_scsi.h
Makefile [SCSI] sd: Support for SCSI disk (SBC) Data Integrity Field 2008-07-26 15:14:56 -04:00
megaraid.c Add a bunch of cycle_kernel_lock() calls 2008-06-20 14:05:53 -06:00
megaraid.h
mesh.c [SCSI] SCSI: remove dev->power.power_state from mesh driver 2008-06-05 09:23:44 -05:00
mesh.h
mvme16x_scsi.c
mvme147.c [SCSI] wd33c93: fix up cut and paste error 2008-04-07 12:19:07 -05:00
mvme147.h
mvsas.c drivers/scsi/mvsas.c: fix printk warnings 2008-05-01 08:04:03 -07:00
ncr53c8xx.c block: unify request timeout handling 2008-10-09 08:56:13 +02:00
ncr53c8xx.h
NCR53c406a.c [SCSI] remove use_sg_chaining 2008-01-30 13:14:02 -06:00
NCR5380.c [SCSI] NCR5380: fix section mismatch 2008-01-23 13:44:31 -06:00
NCR5380.h
NCR_D700.c
NCR_D700.h
NCR_Q720.c
NCR_Q720.h
nsp32.c removed unused #include <linux/version.h>'s 2008-08-23 12:14:12 -07:00
nsp32.h removed unused #include <linux/version.h>'s 2008-08-23 12:14:12 -07:00
nsp32_debug.c [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
nsp32_io.h
osst.c Merge commit 'v2.6.26' into bkl-removal 2008-07-14 15:29:34 -06:00
osst.h
osst_detect.h
osst_options.h
pas16.c
pas16.h
ppa.c [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
ppa.h
ps3rom.c [SCSI] ps3rom: use scsi_build_sense_buffer 2008-04-07 12:19:02 -05:00
ql1040_fw.h
ql1280_fw.h
ql12160_fw.h
qla1280.c block: unify request timeout handling 2008-10-09 08:56:13 +02:00
qla1280.h
qlogicfas.c [SCSI] remove use_sg_chaining 2008-01-30 13:14:02 -06:00
qlogicfas408.c
qlogicfas408.h
qlogicpti.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6 2008-10-11 12:39:35 -07:00
qlogicpti.h qlogicpti: Convert to pure OF driver. 2008-08-29 02:14:46 -07:00
qlogicpti_asm.c
raid_class.c SCSI: convert struct class_device to struct device 2008-04-19 19:10:33 -07:00
script_asm.pl
scsi.c [SCSI] Add helper code so transport classes/driver can control queueing (v3) 2008-10-13 09:28:46 -04:00
scsi.h
scsi_debug.c [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
scsi_devinfo.c [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
scsi_error.c [SCSI] scsi: add transport host byte errors (v3) 2008-10-13 09:28:48 -04:00
scsi_ioctl.c [SCSI] sd,sr: add early detection of medium not present 2008-01-11 18:22:50 -06:00
scsi_lib.c [SCSI] Add helper code so transport classes/driver can control queueing (v3) 2008-10-13 09:28:46 -04:00
scsi_lib_dma.c
scsi_logging.h
scsi_module.c
scsi_netlink.c [SCSI] scsi_netlink: Add transport and LLD recieve and event support 2008-10-03 11:46:13 -05:00
scsi_priv.h block: unify request timeout handling 2008-10-09 08:56:13 +02:00
scsi_proc.c [SCSI] scsi_host_lookup: error returns and NULL pointers 2008-10-03 11:46:12 -05:00
scsi_sas_internal.h SCSI: convert struct class_device to struct device 2008-04-19 19:10:33 -07:00
scsi_scan.c [SCSI] Add helper code so transport classes/driver can control queueing (v3) 2008-10-13 09:28:46 -04:00
scsi_sysctl.c
scsi_sysfs.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2008-10-10 10:53:26 -07:00
scsi_tgt_if.c scsi-tgt: BKL pushdown 2008-07-02 15:06:25 -06:00
scsi_tgt_lib.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2008-10-10 10:53:26 -07:00
scsi_tgt_priv.h [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
scsi_transport_api.h
scsi_transport_fc.c [SCSI] fc class: unblock target after calling terminate callback (take 2) 2008-10-13 09:28:47 -04:00
scsi_transport_fc_internal.h
scsi_transport_iscsi.c [SCSI] scsi_host_lookup: error returns and NULL pointers 2008-10-03 11:46:12 -05:00
scsi_transport_sas.c [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
scsi_transport_spi.c [SCSI] scsi_transport_spi: fix oops in revalidate 2008-07-30 10:22:39 -05:00
scsi_transport_srp.c SCSI: convert struct class_device to struct device 2008-04-19 19:10:33 -07:00
scsi_transport_srp_internal.h
scsi_typedefs.h
scsi_wait_scan.c
scsicam.c [SCSI] Add Documentation and integrate into docbook build 2008-01-11 18:22:40 -06:00
sd.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6 2008-10-10 10:53:26 -07:00
sd.h Re-introduce "[SCSI] extend the last_sector_bug flag to cover more sectors" 2008-08-05 21:42:21 -07:00
sd_dif.c [SCSI] sd: Support for SCSI disk (SBC) Data Integrity Field 2008-07-26 15:14:56 -04:00
ses.c [SCSI] ses: fix VPD inquiry overrun 2008-07-30 10:21:56 -05:00
sg.c sg: remove unnecessary blk_rq_unmap_user 2008-10-09 08:56:16 +02:00
sgiwd93.c [SCSI] jazz_esp, sgiwd93, sni_53c710, sun3x_esp: fix platform driver hotplug/coldplug 2008-04-27 12:33:04 -05:00
sim710.c
sni_53c710.c [SCSI] jazz_esp, sgiwd93, sni_53c710, sun3x_esp: fix platform driver hotplug/coldplug 2008-04-27 12:33:04 -05:00
sr.c block: unify request timeout handling 2008-10-09 08:56:13 +02:00
sr.h [SCSI] sr: fix test unit ready responses 2008-02-07 18:02:44 -06:00
sr_ioctl.c [SCSI] sr: fix test unit ready responses 2008-02-07 18:02:44 -06:00
sr_vendor.c
st.c [SCSI] st: Remove bogus memset 2008-07-26 15:14:47 -04:00
st.h [SCSI] st: add option to use SILI in variable block reads 2008-04-07 12:15:39 -05:00
st_options.h [SCSI] st: add option to use SILI in variable block reads 2008-04-07 12:15:39 -05:00
stex.c [SCSI] stex: fix queue depth setting 2008-07-26 15:14:49 -04:00
sun3_NCR5380.c [SCSI] atari_NCR5380, sun3_NCR5380: operator precedence fix 2008-01-11 18:28:57 -06:00
sun3_scsi.c
sun3_scsi.h
sun3_scsi_vme.c [SCSI] sun3_scsi_vme: add MODULE_LICENSE 2008-04-16 09:28:11 -05:00
sun3x_esp.c [SCSI] jazz_esp, sgiwd93, sni_53c710, sun3x_esp: fix platform driver hotplug/coldplug 2008-04-27 12:33:04 -05:00
sun_esp.c sparc: Annotate of_device_id arrays with const or __initdata. 2008-08-31 01:23:17 -07:00
sym53c416.c [SCSI] sym53c416: fix module parameters 2008-02-12 15:24:58 -06:00
sym53c416.h
t128.c
t128.h
tmscsim.c [SCSI] tmscsim: Fixup KERN_INFO in printk 2008-10-03 11:46:12 -05:00
tmscsim.h
u14-34f.c [SCSI] u14-34f: Fix 32bit only problem 2008-05-02 13:18:06 -05:00
ultrastor.c scsi: fix integer as NULL pointer warnings 2008-04-28 17:31:13 -07:00
ultrastor.h
wd33c93.c [SCSI] WD33C93: let platform stub override no_sync/fast/dma_mode 2008-04-07 12:19:01 -05:00
wd33c93.h
wd7000.c [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
zalon.c [SCSI] replace __FUNCTION__ with __func__ 2008-07-27 10:31:49 -04:00
zorro7xx.c