diff options
author | alc <alc@FreeBSD.org> | 2002-07-28 19:01:38 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2002-07-28 19:01:38 +0000 |
commit | d1b2ba5197cad1a372122bc917dcd843f42811a1 (patch) | |
tree | 73bdd0e7361ad63be3ada3a444382b8703934375 | |
parent | 2d279f09c9cb47443b87f385aab814479ed33ac9 (diff) | |
download | FreeBSD-src-d1b2ba5197cad1a372122bc917dcd843f42811a1.zip FreeBSD-src-d1b2ba5197cad1a372122bc917dcd843f42811a1.tar.gz |
o Lock page queue accesses by vm_page_free().
-rw-r--r-- | sys/vm/vm_object.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 25c53ec..9dd3df7 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -1435,8 +1435,10 @@ vm_object_backing_scan(vm_object_t object, int op) * Page is out of the parent object's range, we * can simply destroy it. */ + vm_page_lock_queues(); vm_page_protect(p, VM_PROT_NONE); vm_page_free(p); + vm_page_unlock_queues(); p = next; continue; } @@ -1453,8 +1455,10 @@ vm_object_backing_scan(vm_object_t object, int op) * * Leave the parent's page alone */ + vm_page_lock_queues(); vm_page_protect(p, VM_PROT_NONE); vm_page_free(p); + vm_page_unlock_queues(); p = next; continue; } @@ -1756,10 +1760,11 @@ again: if (p->valid & p->dirty) continue; } - + vm_page_lock_queues(); vm_page_busy(p); vm_page_protect(p, VM_PROT_NONE); vm_page_free(p); + vm_page_unlock_queues(); } } } else { @@ -1790,10 +1795,11 @@ again: continue; } } - + vm_page_lock_queues(); vm_page_busy(p); vm_page_protect(p, VM_PROT_NONE); vm_page_free(p); + vm_page_unlock_queues(); } start += 1; size -= 1; |