[3379] in linux-scsi channel archive
Re: problems while converting to the new scsi code
daemon@ATHENA.MIT.EDU (Eric Youngdale)
Sat Feb 21 23:52:12 1998
Date: Sat, 21 Feb 1998 23:46:14 -0500 (EST)
From: Eric Youngdale <eric@andante.jic.com>
To: Dario_Ballabio <Dario_Ballabio@milano.europe.dg.com>
cc: linux-scsi@vger.rutgers.edu
In-Reply-To: <199802211810.TAA17420@milano.europe.dg.com>
On Sat, 21 Feb 1998, Dario_Ballabio wrote:
> Hi, I see that in the new scsi code, when the low level driver
> returns DID_BUS_BUSY, the upper layer retries the command
> only 5 times. The command was retried forever in the old
> scsi code. The new behaviour does not work with the Ultrastor 14F,
> where could be necessary to retry a command many more times.
> The old behaviour seems to be more flexible, and the patch in
> scsi_error.c should be:
> case DID_PARITY:
> case DID_BUS_BUSY:
> return NEEDS_RETRY;
> case DID_ERROR:
> goto maybe_retry;
>
> Otherwise a new return code (DID_SOFT_ERROR?) is required in order
> to get the command retried forever. The u14-34f driver relies
> heavily upon the retry forever feature.
I am really trying to get away from retry-forever, and get things
to a point where some conclusion will be reached at some point in a finite
amount of time. You may not like the result, of course, but oftentimes an
infinite number of retries would lead to the system becoming completely
wedged.
In part this is because all access to any device on the bus is now
blocked while error recovery is in progress, so an infinite number of
retries could possibly wedge the system much more easily.
Why do you need an infinite number of retries?
> By the way there is an obvious bug in scsi_obsolete.c: host_active
> must be declared extern rather than static, since it is the same
> host_active variable used in scsi.c.
Thanks. I will get this patch to Linus.
-Eric