DragonFly bugs List (threaded) for 2007-03
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]
Re: [issue530] crash from latest -HEAD
:Peter Avalos <pavalos@theshell.com> added the comment:
:
:Ok, looks like I got another one from Jan 31 sources:
:
:...
:at /usr/src/sys/platform/pc32/i386/exception.s:783
:#7 0x00000000 in ?? ()
:#8 0xc028f21f in vm_pageout () at /usr/src/sys/vm/vm_pageout.c:787
:Previous frame inner to this frame (corrupt stack?)
:
:kernel, vmcore, and possible kernel modules are uploaded to my crash/ on
:leaf. Look for *.2.
:
:--Peter
The pageout daemon is conking out on this:
if (m->object->ref_count == 0) {
...
}
m->object is NULL. So the question is why is there a page without
an associated object sitting on the inactive queue ?
I think this is the second time this panic has been reported.
The only code path I see that could put a page in that state is from
vm_object_terminate(), when it encounters a wired page while destroying
an object. I think that code needs to move the page to the HOLD
queue in order to fix the problem, but I would like to catch it in the
act first.
Here is a patch that will kprintf() pages that I think are causing the
problem. If we get this just before a similar crash, and its the
same page as the one that the pageout code crashed on (The %esi
register in the trapframe points to the vm_page in the crash), then
we will have found it.
Think you can reproduce it? It looks like the issue might be related
to page wiring or a program being terminated while undergoing paging I/O.
-Matt
Index: vm/vm_object.c
===================================================================
RCS file: /cvs/src/sys/vm/vm_object.c,v
retrieving revision 1.29
diff -u -r1.29 vm_object.c
--- vm/vm_object.c 28 Dec 2006 21:24:02 -0000 1.29
+++ vm/vm_object.c 8 Mar 2007 16:51:04 -0000
@@ -460,6 +460,7 @@
vm_page_free(p);
mycpu->gd_cnt.v_pfree++;
} else {
+ kprintf("vm_object_terminate: Warning: Encountered wired page %p\n", p);
vm_page_busy(p);
vm_page_remove(p);
vm_page_wakeup(p);
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]