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>