[SCSI] add global timeout to the scsi mid-layer
There are certain rogue devices (and the aic7xxx driver) that return BUSY or QUEUE_FULL forever. This code will apply a global timeout (of the total number of retries times the per command timer) to a given command. If it is exceeded, the command is completed regardless of its state. The patch also removes the unused field in the command: timeout and timeout_total. This solves the problem of detecting an endless loop in the mid-layer because of BUSY/QUEUE_FULL bouncing, but will not recover the device. In the aic7xxx case, the driver can be recovered by sending a bus reset, so possibly this should be tied into the error handler? Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:

committed by
James Bottomley

parent
f03a567054
commit
b21a413851
@@ -9200,8 +9200,8 @@ asc_prt_scsi_cmnd(struct scsi_cmnd *s)
|
||||
(unsigned) s->serial_number, s->retries, s->allowed);
|
||||
|
||||
printk(
|
||||
" timeout_per_command %d, timeout_total %d, timeout %d\n",
|
||||
s->timeout_per_command, s->timeout_total, s->timeout);
|
||||
" timeout_per_command %d\n",
|
||||
s->timeout_per_command);
|
||||
|
||||
printk(
|
||||
" scsi_done 0x%lx, done 0x%lx, host_scribble 0x%lx, result 0x%x\n",
|
||||
|
Reference in New Issue
Block a user