Date: Wed, 15 Nov 1995 09:27:02 +0100 (MET) From: J Wunsch <j@uriah.heep.sax.de> To: asami@cs.berkeley.edu (Satoshi Asami) Cc: current@freebsd.org Subject: Re: Panic while reading CDROM with latest -current Message-ID: <199511150827.JAA05590@uriah.heep.sax.de> In-Reply-To: <199511150321.TAA00669@silvia.HIP.Berkeley.EDU> from "Satoshi Asami" at Nov 14, 95 07:21:51 pm
next in thread | previous in thread | raw e-mail | index | archive | help
As Satoshi Asami wrote:
>
> I got a panic while reading from a CDROM. A simple command such as
> "dd if=/cdrom/packages/printing/mltex-3.1415.tgz of=/dev/null" will
> cause a panic reliably.
>
> I moved the CDROM drive from the Adaptec 2940UW to NCR 53c825 today,
> and the panic happened after that. But then, I haven't been using the
> CDROM for anything else than playing audio CD's for a while, so this
> may just be a coincidence.
>
> ===
> Fatal trap 12: page fault while in kernel mode
> fault virtual address = 0x242
> fault code = supervisor read, page not present
> instruction pointer = 0x8:0x60125000
0xf0125000
...i assume.
> code segment = base 0x0, limit 0xfffff, type 0x1b
> = DPL 0, pres 1, def32 1, gran 1
> processor eflags = interrupt enabled, resume, IOPL=0
> current process = 28 (dd)
> interrupt mask = bio
> panic: page fault
> ===
>
> nm /kernel | sort gives:
>
> ===
> f0124b44 T _vfs_bio_awrite
> f0124d14 t _getnewbuf
> f0124fc8 T _incore
> f012503c T _inmem
Argl! This is the incore() panic again. At least Hellmuth Michaelis
and somebody else who's name i forgot have been reporting this one,
but it only occured for the last (highest ID #) CD drive of a multi-CD
environment for them. So it's never been tracked down to the bitter
end.
If i look at your configuration:
> 19: ncr0 at pci0:15 # int a irq 9
> 20: sd2 at SCSI bus 1:1:0 (ready)
> 21: sd3 at SCSI bus 1:2:0 (ready)
> 22: sd4 at SCSI bus 1:3:0 (ready)
> 23: sd5 at SCSI bus 1:4:0 (ready)
> 24: sd6 at SCSI bus 1:5:0 (ready)
> 25: cd0 at SCSI bus 1:6:0 (ready) (open)
there's some resemblance to their environment however: the CD is the
highest ID#, only the lower numbered devices are sd ones. Dunno if
this is an incidence only.
FWIW, the problem happens:
struct buf *
incore(struct vnode * vp, daddr_t blkno)
{
struct buf *bp;
struct bufhashhdr *bh;
int s = splbio();
bh = BUFHASH(vp, blkno);
bp = bh->lh_first;
^^^^ <<================ here
/* Search hash chain */
while (bp != NULL) {
/* hit */
if (bp->b_vp == vp && bp->b_lblkno == blkno &&
(bp->b_flags & B_INVAL) == 0) {
break;
}
bp = bp->b_hash.le_next;
}
splx(s);
return (bp);
}
Somehow, BUFHASH() returns a bogus value (but is apparently believed
to always return valid pointers /* CANTHAPPEN */).
--
cheers, J"org
joerg_wunsch@uriah.heep.sax.de -- http://www.sax.de/~joerg/ -- NIC: JW11-RIPE
Never trust an operating system you don't have sources for. ;-)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199511150827.JAA05590>
