Re: one-line-patch against SCSI-Read-Error-BUG()

Jens Axboe
2002-02-07T07:30:39Z

On Wed, Feb 06 2002, Patrick Mansfield wrote:
> On Tue, Feb 05, 2002 at 03:32:10PM +0100, Ralf Oehler wrote:
> > Hi, List
> >
> > I think, I found a very simple solution for this annoying BUG().
> >
> > Since at least kernel 2.4.16 there is a BUG() in pci.h,
> > that crashes the kernel on any attempt to read a SCSI-Sector
> > from an erased MO-Medium and on any attempt to read
> > a sector from a SCSI-disk, which returns "Read-Error".
> >
> > There seems to be a thinko in the corresponding code, which
> > does not take into account the case where a SCSI-READ
> > does not return any data because of a "sense code: read error"
> > or a "sense code: blank sector".
>
> > Regards,
> > Ralf

Sorry guys, I should have written a followup yesterday. I did solved
Ralf's problem for him. It was due to some paths not agreeing on when to
use clustering for a request and when not to -- for some historical
reason, MO drives have clustering disabled. The easy (and correct
solution, IMO) is to just allow clustering if the host permits it. So
the patch to solve the problem is as follows, also sent to Marcelo
yesterday.

--- /opt/kernel/linux-2.4.18-pre8/drivers/scsi/scsi_merge.c Thu Oct 25 23:05:31 2001
+++ drivers/scsi/scsi_merge.c Wed Feb 6 10:49:50 2002
@@ -150,14 +150,7 @@
panic("DMA pool exhausted");
}

-/*
- * FIXME(eric) - the original disk code disabled clustering for MOD
- * devices. I have no idea why we thought this was a good idea - my
- * guess is that it was an attempt to limit the size of requests to MOD
- * devices.
- */
-#define CLUSTERABLE_DEVICE(SH,SD) (SH->use_clustering && \
- SD->type != TYPE_MOD)
+#define CLUSTERABLE_DEVICE(SH,SD) (SH->use_clustering)

/*
* This entire source file deals with the new queueing code.

--
Jens Axboe