Date: Mon, 13 May 1996 00:20:55 +0200 (MET DST) From: nox@jelal.hb.north.de To: FreeBSD-gnats-submit@freebsd.org Subject: kern/1195: vm_page_unhold: hold count < 0!!! Message-ID: <199605122220.AAA02946@saturn.hb.north.de> Resent-Message-ID: <199605130010.RAA24764@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 1195
>Category: kern
>Synopsis: stable with DIAGNOSTIC panics `vm_page_unhold: hold count < 0'
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Sun May 12 17:10:02 PDT 1996
>Last-Modified:
>Originator: Juergen Lock
>Organization:
orga-what?
>Release: FreeBSD 2.1-STABLE i386
>Environment:
-stable as of ~a week old, but problem seen since, uh, 2.0?
>Description:
Every time i make a DIAGNOSTIC kernel and then dump more than
a few MB to tape using afio, i get this. Then i disable the panic
and everything is well again. So this itself is not critical but...
>How-To-Repeat:
(boot DIAGNOSTIC kernel, install afio, mount scratch monk.. errm, tape)
find /usr/src | afio -G 2 -o -v -f -b 5120 -c 1000 -s 100000x -Z /dev/nrst0
>Fix:
As all the problematic calls seem to come out of vunmapbuf,
Index: i386/i386/vm_machdep.c
@@ -783,8 +783,20 @@
/*
* release the data page
*/
+#ifdef DIAGNOSTIC
+ vm_page_t foo;
+ pa = pmap_kextract((vm_offset_t) addr);
+ foo = PHYS_TO_VM_PAGE(pa);
+ if (foo->hold_count <= 0) {
+ /* panic in vm_page_unhold -> printf */
+ printf("vunmapbuf: vm_page_unhold: hold count %d <= 0!!!\n", foo->hold_count);
+ foo->hold_count = 1;
+ }
+ vm_page_unhold(foo);
+#else
pa = pmap_kextract((vm_offset_t) addr);
vm_page_unhold(PHYS_TO_VM_PAGE(pa));
+#endif
}
}
now try the write again and you get a console full of these printfs.
hope it helps...
Juergen
>Audit-Trail:
>Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199605122220.AAA02946>
