Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 29 Jul 2002 05:09:13 -0400 (EDT)
From:      Stuart Barkley <stuartb@4gh.net>
To:        freebsd-stable@FreeBSD.ORG
Cc:        Ian Dowse <iedowse@maths.tcd.ie>, John Baldwin <jhb@FreeBSD.ORG>
Subject:   Re: READ_BIG problems 
Message-ID:  <20020729044910.X69603-100000@precipice.4gh.net>
In-Reply-To: <200207261528.aa62716@salmon.maths.tcd.ie>

next in thread | previous in thread | raw e-mail | index | archive | help
I continue to see the READ_BIG problems on my 4.6.1 test system.

I've just finished a round of testing where I re-cvsup'ed with
tag=RELENG_4_6 and applied the patches suggested below.

After rebuilding and reinstalling (just the kernel, using 4.6-RELEASE
userland) I now see rare, but still occasional READ_BIG errors.

For testing I'm using a CD-R with 4.6-RELEASE mounted on /cdrom and
use the following commands:

    root@nick-3% find -s . -print0 | xargs -0 md5 > ~/4.6.md5.4
    root@nick-4% find -s . -print0 | xargs -0 md5 > ~/4.6.md5.5
    md5: ./packages/www/xswallow-1.0.18.tgz: Input/output error
    root@nick-5%

On my most recent build I have received a single READ_BIG error on
each of two runs of the command:

    Jul 29 03:42:43 nick /kernel: acd0: READ_BIG - ILLEGAL REQUEST asc=0x64 ascq=0x00 error=0x00
    Jul 29 04:42:00 nick /kernel: acd0: READ_BIG - ILLEGAL REQUEST asc=0x64 ascq=0x00 error=0x00

Earlier testing tonight showed that the dev->si_iosize_max patch had
the most impact.  I'm not sure the other patches showed any input.

Before the last cvsup and rebuild I was seeing somewhat more errors
(using these same patches), but far less than previously.  I'll try a
few more build variations and see if I can relate the change in error
rate to other things.

dmesg shows the cdrom as:

    acd0: CDROM <CREATIVE CD3231E> at ata0-slave BIOSPIO

I'm currently booting with:

    hw.ata.wc="0"
    hw.ata.tags="0"
    hw.ata.ata_dma="0"
    hw.ata.atapi_dma="0"

Other variations didn't seem to have any impact.

On Thu, 25 Jul 2002, Ian Dowse wrote:

> Date: Thu, 25 Jul 2002 22:06:38 +0100
> From: Ian Dowse <iedowse@maths.tcd.ie>
> To: Hans Ottevanger <hansot@iae.nl>
> Cc: 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
>
> 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
>

On Fri, 26 Jul 2002, Ian Dowse wrote:

> Date: Fri, 26 Jul 2002 15:28:48 +0100
> From: Ian Dowse <iedowse@maths.tcd.ie>
> To: Jesse Gross <jesse_gross@yahoo.com>
> Cc: John Baldwin <jhb@FreeBSD.ORG>, stable@FreeBSD.ORG,
>      Mark Hartley <mark@work.drapple.com>, John Prince <johnp@lodgenet.com>,
>      Hans Ottevanger <hansot@iae.nl>
> Subject: Re: READ_BIG problems
>
> In message <20020726134201.72747.qmail@web14107.mail.yahoo.com>, Jesse Gross wr
> ites:
> >No luck.
> >
> >The patch didn't seem to make any difference.
>
> Thanks to everybody for trying. Below is another patch that apparently
> does help - I got Hans to try it, and he says that it seemed to work.
>
> Does this makes a difference for anybody else?
>
> Ian
>
> Index: atapi-cd.c
> ===================================================================
> RCS file: /home/iedowse/CVS/src/sys/dev/ata/atapi-cd.c,v
> retrieving revision 1.48.2.16
> diff -u -r1.48.2.16 atapi-cd.c
> --- atapi-cd.c	27 Mar 2002 19:48:37 -0000	1.48.2.16
> +++ atapi-cd.c	26 Jul 2002 14:22:37 -0000
> @@ -266,7 +266,7 @@
>      dev = make_dev(&acd_cdevsw, dkmakeminor(cdp->lun, 0, 0),
>  		   UID_ROOT, GID_OPERATOR, 0644, "acd%d", cdp->lun);
>      dev->si_drv1 = cdp;
> -    dev->si_iosize_max = 252 * DEV_BSIZE;
> +    dev->si_iosize_max = 64 * DEV_BSIZE;
>      dev->si_bsize_phys = 2048; /* XXX SOS */
>      cdp->dev = dev;
>      cdp->device->flags |= ATA_D_MEDIA_CHANGED;
>
>
>
>
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-stable" in the body of the message


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?20020729044910.X69603-100000>