cvs commit: src/sys/vm vm_contig.c
delphij at FreeBSD.org
Wed Nov 24 10:56:13 PST 2004
delphij 2004-11-24 18:56:13 UTC
FreeBSD src repository
Try to close a potential, but serious race in our VM subsystem.
Historically, our contigmalloc1() and contigmalloc2() assumes
that a page in PQ_CACHE can be unconditionally reused by busying
and freeing it. Unfortunatelly, when object happens to be not
NULL, the code will set m->object to NULL and disregard the fact
that the page is actually in the VM page bucket, resulting in
page bucket hash table corruption and finally, a filesystem
corruption, or a 'page not in hash' panic.
This commit has borrowed the idea taken from DragonFlyBSD's fix
to the VM fix by Matthew Dillon. This version of patch will
do the following checks:
- When scanning pages in PQ_CACHE, check hold_count and
skip over pages that are held temporarily.
- For pages in PQ_CACHE and selected as candidate of being
freed, check if it is busy at that time.
Note: It seems that this is might be unrelated to kern/72539.
Obtained from: DragonFlyBSD, sys/vm/vm_contig.c,v 1.11 and 1.12 
Reminded by: Matt Dillon
Reworked by: alc
MFC After: 1 week
Revision Changes Path
1.41 +15 -2 src/sys/vm/vm_contig.c
More information about the cvs-all