diff options
author | alc <alc@FreeBSD.org> | 2004-02-15 00:42:26 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2004-02-15 00:42:26 +0000 |
commit | aae81a61cfac89287f791a1fb638927b5a8e2085 (patch) | |
tree | 49d4b20ee9ddc6d48ebb9fa5c47ff994e2e07572 /sys/vm/vm_fault.c | |
parent | 725402dfa303167ba2d27c82e7851b72e03fb18a (diff) | |
download | FreeBSD-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.c | 4 |
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); |