Date: Mon, 1 Jun 1998 10:14:52 +1000 From: Bruce Evans <bde@zeta.org.au> To: abial@nask.pl, julian@whistle.com Cc: brianfeldman@hotmail.com, freebsd-current@FreeBSD.ORG Subject: Re: fd crash (in isa_dmastart) Message-ID: <199806010014.KAA21095@godzilla.zeta.org.au>
next in thread | raw e-mail | index | archive | help
>On Sun, 31 May 1998, Julian Elischer wrote: > >> I'm not sure what causes this but it should be easy enough to reproduce.. >> I'll add it to my list of things to clean up... >> >> Interestingly enoungh the stack trace shows no softupdates related >> functions. >> I will guess however that the softupdate code may not fully appreciate the >> subtlties of bounce buffers >> as they are a FreeBSD oddity. >> (I can actually think of a few things to check out.) >> this may be a problem with aha1542 scsi systems too. > >As I wrote you some time ago, it's enough to try to mount msdos floppy >under DEVFS/SLICE kernel - it immediately panics with the same message. It's probably just the stale v_object bug. Here is a a sure kill: [Put an msdosfs floppy in /dev/fd0.] mount /dev/fd0 /mnt mount -t msdos /dev/fd0 /mnt msdosfs with a block size of 512 produces requests on the block device that are misaligned relative to page boundaries (1 block at blkno #0, 3 blocks at #1, 3 blocks at #4 and 3 blocks at #7, maybe more). Normally these requests are handled sub-optimally using malloced buffers, but the stale v_object makes getblk() think that a B_VMIO buffer will work. This gives a bogus buffer for the (3 blocks #7 request): #GDB is free software and you are welcome to distribute copies of it # under certain conditions; type "show copying" to see the conditions. #There is absolutely no warranty for GDB; type "show warranty" for details. #GDB 4.16 (i386-unknown-freebsd), #Copyright 1996 Free Software Foundation, Inc... #IdlePTD 2c9000 #initial pcb at 239d1c #panicstr: isa_dmacheck: no physical page present #panic messages: #--- #panic: isa_dmacheck: no physical page present # #syncing disks... 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 giving up #1: dev:00010202, flags:20100010, blkno:7, lblkno:7 #2: dev:00000400, flags:21020034, blkno:89664, lblkno:0 #3: dev:00000400, flags:21020014, blkno:85422, lblkno:0 #4: dev:00000400, flags:21020034, blkno:70432, lblkno:0 #5: dev:00000400, flags:21020034, blkno:71054, lblkno:0 #6: dev:00000400, flags:21020014, blkno:71806, lblkno:0 #7: dev:00000400, flags:21020014, blkno:69070, lblkno:0 #8: dev:00000400, flags:21020014, blkno:71276, lblkno:0 #9: dev:00000400, flags:21020014, blkno:71070, lblkno:0 #10: dev:00000400, flags:21020014, blkno:70320, lblkno:0 #11: dev:00000400, flags:21020014, blkno:67312, lblkno:0 #12: dev:00000400, flags:21020034, blkno:65712, lblkno:65712 #13: dev:00000400, flags:21020034, blkno:65680, lblkno:65680 #14: dev:00000400, flags:21020034, blkno:65648, lblkno:65648 #15: dev:00000400, flags:21020034, blkno:65600, lblkno:65600 # #dumping to dev 30001, offset 67520 #dump 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 #--- ##0 boot (howto=256) at ./@/kern/kern_shutdown.c:281 #281 dumppcb.pcb_cr3 = rcr3(); #(kgdb) where ##0 boot (howto=256) at ./@/kern/kern_shutdown.c:281 ##1 0xf0121293 in panic ( # fmt=0xf0209138 "isa_dmacheck: no physical page present") # at ./@/kern/kern_shutdown.c:421 ##2 0xf02091bd in isa_dmarangecheck ( # va=0xf14e3000 <Address 0xf14e3000 out of bounds>, length=512, chan=2) # at ./@/i386/isa/isa.c:908 ##3 0xf0208eca in isa_dmastart (flags=537919504, # addr=0xf14e3000 <Address 0xf14e3000 out of bounds>, nbytes=512, chan=2) # at ./@/i386/isa/isa.c:772 ##4 0xf0203e46 in fdstate (fdcu=0, fdc=0xf0287028) at ./@/i386/isa/fd.c:1757 ##5 0xf02038fc in fdintr (vfdc=0xf0287028) at ./@/i386/isa/fd.c:1560 #(kgdb) up 4 ##4 0xf0203e46 in fdstate (fdcu=0, fdc=0xf0287028) at ./@/i386/isa/fd.c:1757 #1757 isa_dmastart(bp->b_flags, bp->b_data+fd->skip, #(kgdb) p/x *bp #$1 = {b_hash = {le_next = 0xf12cf6f8, le_prev = 0xf023bc30}, b_vnbufs = { # le_next = 0xf12d0160, le_prev = 0xf948ea30}, b_freelist = { # tqe_next = 0xf12d03b0, tqe_prev = 0xf022a244}, b_act = {tqe_next = 0x0, # tqe_prev = 0xf0287070}, b_proc = 0x0, b_flags = 0x20100010, # b_qindex = 0x0, b_usecount = 0x5, b_error = 0x0, b_bufsize = 0x600, # b_bcount = 0x600, b_resid = 0x0, b_dev = 0x10202, b_data = 0xf14e2e00, ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^ 0x600 bytes required only 0x200 bytes here # b_kvabase = 0xf14e2000, b_kvasize = 0x2000, b_lblkno = 0x7, b_blkno = 0x7, # b_offset = 0x0000000000000e00, b_iodone = 0x0, b_iodone_chain = 0x0, # b_vp = 0xf948ea00, b_dirtyoff = 0x0, b_dirtyend = 0x0, b_rcred = 0x0, # b_wcred = 0x0, b_validoff = 0x0, b_validend = 0x0, b_pblkno = 0x7, # b_saveaddr = 0x0, b_savekva = 0x0, b_driver1 = 0x0, b_driver2 = 0x0, # b_spc = 0x0, b_cluster = {cluster_head = {tqh_first = 0x0, tqh_last = 0x0}, # cluster_entry = {tqe_next = 0x0, tqe_prev = 0x0}}, b_pages = {0xf0463508, ^^^^^^^^^^^^^^^^^^^^^ only one page mapped # 0x0 <repeats 31 times>}, b_npages = 0x1, b_dep = {lh_first = 0x0}} #(kgdb) q Bruce To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199806010014.KAA21095>