summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_fault.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2004-02-15 00:42:26 +0000
committeralc <alc@FreeBSD.org>2004-02-15 00:42:26 +0000
commitaae81a61cfac89287f791a1fb638927b5a8e2085 (patch)
tree49d4b20ee9ddc6d48ebb9fa5c47ff994e2e07572 /sys/vm/vm_fault.c
parent725402dfa303167ba2d27c82e7851b72e03fb18a (diff)
downloadFreeBSD-src-aae81a61cfac89287f791a1fb638927b5a8e2085.zip
FreeBSD-src-aae81a61cfac89287f791a1fb638927b5a8e2085.tar.gz
Correct a long-standing race condition in vm_fault() that could result in a
panic "vm_page_cache: caching a dirty page, ...": Access to the page must be restricted or removed before calling vm_page_cache(). This race condition is identical in nature to that which was addressed by vm_pageout.c's revision 1.251 and vm_page.c's revision 1.275. Reviewed by: tegge MFC after: 7 days
Diffstat (limited to 'sys/vm/vm_fault.c')
-rw-r--r--sys/vm/vm_fault.c4
1 files changed, 1 insertions, 3 deletions
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index fe33cbf..602b659 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -488,10 +488,8 @@ readrest:
mt->hold_count ||
mt->wire_count)
continue;
- if (mt->dirty == 0)
- vm_page_test_dirty(mt);
+ pmap_remove_all(mt);
if (mt->dirty) {
- pmap_remove_all(mt);
vm_page_deactivate(mt);
} else {
vm_page_cache(mt);
OpenPOWER on IntegriCloud