Date: Sun, 24 Jan 1999 03:28:27 +0800 From: Peter Wemm <peter@netplex.com.au> To: Doug Rabson <dfr@nlsystems.com> Cc: Matthew Dillon <dillon@apollo.backplane.com>, current@FreeBSD.ORG Subject: Re: panic: found dirty cache page 0xf046f1c0 Message-ID: <199901231928.DAA00732@spinner.netplex.com.au> In-Reply-To: Your message of "Sat, 23 Jan 1999 19:13:27 GMT." <Pine.BSF.4.01.9901231912070.59627-100000@herring.nlsystems.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Doug Rabson wrote: > On Sat, 23 Jan 1999, Matthew Dillon wrote: > > > > > :I made it happen again by doing the same installworld but this time I > > :caught it in the debugger. I'll leave the machine up for a while in case > > :someone has some idea of how to debug it. The stacktrace looks like this: > > : > > :#0 Debugger () at ../../alpha/alpha/db_interface.c:260 > > :#1 0xfffffc000036c2c0 in panic () at ../../kern/kern_shutdown.c:444 > > :#2 0xfffffc00004942fc in vm_page_alloc () at ../../vm/vm_page.c:1041 > > :#3 0xfffffc00003a1b54 in allocbuf () at ../../kern/vfs_bio.c:1791 > > > > The panic message should be printing the address of the vm_page_t that > > it caught. > > > > From the debugger, dump that vm_page_t with 'print'. > > > > print *0xADDRESS > > > > Do about 8 print's bumping the address by 4 ( in hex ) for each. > > > > It would be even better if we could figure out the contents and type > > of the underlying object. > > I have full symbols: > > (gdb) fr 2 > #2 0xfffffc00004942fc in vm_page_alloc () at ../../vm/vm_page.c:1041 > 1041 panic("found dirty cache page %p", m); > (gdb) l > 1036 */ > 1037 > 1038 if (qtype == PQ_CACHE) { > 1039 #if !defined(MAX_PERF) > 1040 if (m->dirty) > 1041 panic("found dirty cache page %p", m); > 1042 > 1043 #endif > 1044 vm_page_busy(m); > 1045 vm_page_protect(m, VM_PROT_NONE); > (gdb) p m > $4 = (struct vm_page *) 0xfffffe0000108f40 > (gdb) p *m > $5 = {pageq = {tqe_next = 0x0, tqe_prev = 0xfffffc000052ecc8}, hnext = 0x0, > listq = {tqe_next = 0xfffffe0000090fe0, tqe_prev = 0xfffffe00000bb6b8}, > object = 0xfffffe00050e2a10, pindex = 12, phys_addr = 88940544, queue = 172 , > flags = 128, pc = 41, wire_count = 0, hold_count = 0, act_count = 5 '\005', > busy = 0 '\000', valid = 65535, dirty = 65535} > -- Doug, Matt wanted some things from m->object too.. If it's still there can you grab it? printf( "found dirty cache page %p (%p,%d,%x) obtype %d obflags %x", m, m->object, (int)m->pindex, (int)m->flags, (int)m->object->type, (int)m->object->flags ); BTW; in vm_map.c: /* * vm_map_clean * * Push any dirty cached pages in the address range to their pager. * If syncio is TRUE, dirty pages are written synchronously. * If invalidate is TRUE, any cached pages are freed as well. * * Returns an error if any part of the specified range is not mapped. */ This kinda suggests that dirty cached pages might not be all that unusual.. but the code in question seems to be working at a different level. Cheers, -Peter -- Peter Wemm <peter@netplex.com.au> Netplex Consulting "No coffee, No workee!" :-) 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?199901231928.DAA00732>