Messages in this thread Patch in this message |  | | Date | Thu, 13 Mar 2003 18:14:26 +0100 | From | Jens Axboe <> | Subject | Re: OOPS in 2.4.21-pre5, ide-scsi |
| |
On Thu, Mar 13 2003, James Stevenson wrote: > > > > Your explanation doesn't quite make sense, but I can take a look at > the > > > > problem :-) > > > > > > > > What kernel is the below oops from? What compiler? > > > > > > i can trigger this on any 2.4.x series kernel. > > > -> Insert dmaged / lightly scratched cd into drive > > > dd /dev/scd0 bs=8192k of=file > > > wait for opps. > > > opps also cd tries to re read several times > > > short hang then the following output > > > > > > gcc versions. > > > Whatever shits with redhat 7.1 + 7.2 + 7.3 and the > > > updates between them in each of the redhat versions. > > > but normally > > > Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs > > > gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98) > > > > > > or > > > Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs > > > gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-113) > > > > weee ok not my choice for compilers, but probably alright. do me a favor > > then: > > > > # cd /to/kernel/source > > # rm drivers/scsi/ide-scsi.o > > # EXTRA_CFLAGS=-g make drivers/scsi/ide-scsi.o > > # objdump -S drivers/scsi/ide-scsi.o > /tmp/some_file > > i know longer have the source tree from what the opps was generated > from that was actually the 2.4.19 opps i posted but the kernel is now > 2.4.20 it was the same trace and same place in the file i tracked it to > this point. > > >From 2.4.20 tree line 333 ide-scsi.c > > 333: if ((status & DRQ_STAT) == 0) { /* No more interrupts */ > if (test_bit(IDESCSI_LOG_CMD, &scsi->log)) > printk (KERN_INFO "Packet command completed, %d > bytes transferred\n", pc->actually_transferred); > ide__sti(); > if (status & ERR_STAT) > 338: rq->errors++; > idescsi_end_request (1, HWGROUP(drive)); > return ide_stopped; > } > > > the oops occurs on line 338 > > i know its only error counting on that line but rq->errors is used > in idescsi_end_request as well which from what i can work out if it > never hits the limit it will keep retrying on the drive for ever. Then > i start to get lost / confused .... > I cant retrigger at the weekend if you wish and provide all uptodate > information on it.
Ok, please reproduce in 2.4.21-pre5, its end_request handling is a lot different. If you just want a one-liner, I'd suggest trying something ala this on 2.4.20 and see if it makes any difference:
--- drivers/scsi/ide-scsi.c~ 2003-03-13 18:13:00.876624632 +0100 +++ drivers/scsi/ide-scsi.c 2003-03-13 18:13:14.167604096 +0100 @@ -313,7 +313,7 @@ byte status, ireason; int bcount; idescsi_pc_t *pc=scsi->pc; - struct request *rq = pc->rq; + struct request *rq = HWGROUP(drive)->rq; unsigned int temp; #if IDESCSI_DEBUG_LOG
But really, 2.4.21-pre is much more interesting to reproduce on.
-- Jens Axboe
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |