> Hi All,
> 
> Doug Ledford wrote:
> > 
> > "Boerner, Brian" wrote:

> > If you're going to do the work, then make the timeout on a per controller
> > basis (I suppose it should actually be on a per device basis when I think
<stuff deleted>
> 
>       Yes, timeouts should be on a per device basis.
> 
>       Regarding "timeout values back down to about 8 seconds"...
> 
>       I think you'll find some devices after exhausting it's retries w/ECC,
> and perhaps performing Automatic Read/Write Allocation for bad blocks, your 8
> second timeout will be exceeded, leading to false errors.  Of course tapes
> and medium changers require much longer command timeouts.  Timeouts should
> be controlled by the device driver generating the request (IMHO).
> 
>       Also, I think you need to honor the device timeout setup, since your
> driver does not know if an external RAID box is attached.
> 
>       You may also find there are other commands, such as Test Unit Ready,
> which require longer timeouts for RAID boxes which do transparent controller
> failover.  Replacing all hardcoded timeouts with variables would be great!
> 
> Kind Regards,
> Robin

Since we are talking about improving the granularity of the timer why not take 
the timeout level to the command level per device.  The seek on a tape can 
take a lot longer than a seek on a disk.  A write filemarks on a tape can take 
a lot longer than a "regular" write.  There could be a default set of timers 
per command per device (disk, tape, ...) and a mechanism (maybe ioctl and/or 
compile time) that would allow specific timeout values for a specific device.  
We should be able to come up with reasonable values that the default works for 
a majority of devices.

It is unfortunate that for convenience RAID boxes return direct-access.  If 
they returned Storage array controller device (and the OS's could handle that) 
then we could have reasonable default values for them as well instead of 
having to make them work in the timeout values of a regular hard disk or most 
likely the case making the default timeout values for a disk gross because 
RAID boxes can take so long.

I think the implementation could be something like instead of making this a 
variable per device make it a pointer.  If the pointer is null then let the 
various drivers use their default value.  If the pointer is not null then 
index by the command to get the timer.  The device specific drivers (sd, sg, 
...) could set the pointer when they detect a device and one could even have 
an ioctl that would replace the timeout array with a device specific one with 
either really tight values for quick error recovery or more likely really 
gross numbers to handle those end cases where a RAID can go on its coffee 
break.  :-)

Eddie Williams



-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]

Reply via email to