Skip site navigation (1)Skip section navigation (2)
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>