aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/libsas/sas_init.c
diff options
context:
space:
mode:
authorDarrick J. Wong <[email protected]>2007-01-11 22:15:00 +0000
committerJames Bottomley <[email protected]>2007-01-13 22:13:38 +0000
commit6d4dcd4dae25c48e8932326aaedfe560d7f2c7bb (patch)
tree4ab6566de836ff50931ee7487d7e7c7ad6d11b39 /drivers/scsi/libsas/sas_init.c
parent[SCSI] libsas: Add a sysfs knob to enable/disable a phy (diff)
downloadkernel-6d4dcd4dae25c48e8932326aaedfe560d7f2c7bb.tar.gz
kernel-6d4dcd4dae25c48e8932326aaedfe560d7f2c7bb.zip
[SCSI] libsas: Reset timer on taskless scsi_cmnds in sas_scsi_timed_out
Every so often, a scsi_cmnd will time out, and the libsas timeout handler will discover that the scsi_cmnd does not have a sas_task attached to it. This can happen in two cases: (1) the scsi_cmnd actually made it through libsas to the HBA and is now going through scsi_done, or (2) the scsi_cmnd has been held up (host lock, slab alloc, etc) and libsas has not yet attached a sas_task. In both cases, it is safe to ask SCSI for more time to process the command via EH_RESET_TIMER; we cannot blindly return EH_HANDLED because if (2) happens, we could end up calling scsi_done while another CPU is heading towards sas_queuecommand, which causes slab corruption when sas_task_done updates the freed scsi_cmnd. Signed-off-by: Darrick J. Wong <[email protected]> Signed-off-by: James Bottomley <[email protected]>
Diffstat (limited to 'drivers/scsi/libsas/sas_init.c')
0 files changed, 0 insertions, 0 deletions