Date: Fri, 26 Jul 2002 09:21:50 -0500 From: John Prince <johnp@lodgenet.com> To: Ian Dowse <iedowse@maths.tcd.ie> Cc: Hans Ottevanger <hansot@iae.nl>, John Baldwin <jhb@FreeBSD.org>, stable@FreeBSD.org, Mark Hartley <mark@work.drapple.com>, Jesse Gross <jesse_gross@yahoo.com>, John Prince <johnp@lodgenet.com> Subject: Re: READ_BIG problems Message-ID: <5.0.2.1.2.20020726091807.020b31b0@popmail.ct.lodgenet.com> In-Reply-To: <200207252206.aa43155@salmon.maths.tcd.ie> References: <Your message of "Thu, 25 Jul 2002 22:44:09 %2B0200." <3D406319.1136A6EA@iae.nl>
next in thread | previous in thread | raw e-mail | index | archive | help
Hi Ian.
I am sorry, I did not get back to you with regards to the patches you sent
last week.
I applied them, unfortunately, no changes..
At first I thought I saw an improvement, however after further testing,
the unpatched and the patched revisions, both exhibit the same symptoms.
Thanks.
--john
At 10:06 PM 7/25/2002 +0100, Ian Dowse wrote:
>In message <3D406319.1136A6EA@iae.nl>, Hans Ottevanger writes:
> >acd0: READ_BIG command timeout - resetting
> >ata1: resetting devices .. done
> >acd0: READ_BIG command timeout - resetting
> >ata1: resetting devices .. done
>
>Could people seeing this and other ATA problems try the patch below?
>This should fix some unlikely races that could potentially be
>responsible for these problems, though I suspect it will not make
>any difference.
>
>The second part of the patch is a workaround for the "atprq" hangs
>on ATAPI tape drives.
>
>Ian
>
>Index: ata-all.c
>===================================================================
>RCS file: /home/iedowse/CVS/src/sys/dev/ata/ata-all.c,v
>retrieving revision 1.50.2.37
>diff -u -r1.50.2.37 ata-all.c
>--- ata-all.c 19 Jun 2002 08:30:48 -0000 1.50.2.37
>+++ ata-all.c 18 Jul 2002 17:00:27 -0000
>@@ -228,10 +228,10 @@
> !ch->r_io || !ch->r_altio || !ch->r_irq)
> return ENXIO;
>
>+ s = splbio();
> /* make sure channel is not busy */
> ATA_SLEEPLOCK_CH(ch, ATA_CONTROL);
>
>- s = splbio();
> #if NATADISK > 0
> if (ch->devices & ATA_ATA_MASTER && ch->device[MASTER].driver)
> ad_detach(&ch->device[MASTER], 1);
>@@ -669,10 +669,12 @@
> #endif
> int s;
>
>- if (!ATA_LOCK_CH(ch, ATA_ACTIVE))
>+ s = splbio();
>+ if (!ATA_LOCK_CH(ch, ATA_ACTIVE)) {
>+ splx(s);
> return;
>+ }
>
>- s = splbio();
> #if NATADISK > 0
> /* find & call the responsible driver if anything on the ATA queue */
> if (TAILQ_EMPTY(&ch->ata_queue)) {
>Index: atapi-all.c
>===================================================================
>RCS file: /home/iedowse/CVS/src/sys/dev/ata/atapi-all.c,v
>retrieving revision 1.46.2.14
>diff -u -r1.46.2.14 atapi-all.c
>--- atapi-all.c 14 Jul 2002 12:35:28 -0000 1.46.2.14
>+++ atapi-all.c 14 Jul 2002 23:39:00 -0000
>@@ -186,6 +186,7 @@
> request->flags = flags;
> request->timeout = timeout * hz;
> request->ccbsize = atadev->param->packet_size ? 16 : 12;
>+ request->error = EINPROGRESS;
> bcopy(ccb, request->ccb, request->ccbsize);
> if (callback) {
> request->callback = callback;
>@@ -215,7 +216,8 @@
> }
>
> /* wait for request to complete */
>- tsleep((caddr_t)request, PRIBIO, "atprq", 0);
>+ if (request->error == EINPROGRESS)
>+ tsleep((caddr_t)request, PRIBIO, "atprq", 0);
> splx(s);
> error = request->error;
> if (error)
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5.0.2.1.2.20020726091807.020b31b0>
