summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-11-24 06:13:38 +0000
committeralc <alc@FreeBSD.org>2002-11-24 06:13:38 +0000
commit38f9b7852cd244435edbb4adb2115f7fb2992ad7 (patch)
tree0a47c36737222e313d8571677f4536dd6e3d42b9 /sys
parent723c83e3b4c94002b86e1efce61f943049884f7f (diff)
downloadFreeBSD-src-38f9b7852cd244435edbb4adb2115f7fb2992ad7.zip
FreeBSD-src-38f9b7852cd244435edbb4adb2115f7fb2992ad7.tar.gz
Extend the scope of the page queues/fields locking in vm_freeze_copyopts()
to cover pmap_remove_all(). Approved by: re
Diffstat (limited to 'sys')
-rw-r--r--sys/vm/vm_object.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index ec59e9b..b71d9c8 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -1933,7 +1933,9 @@ vm_freeze_copyopts(vm_object_t object, vm_pindex_t froma, vm_pindex_t toa)
if (m_out->valid == 0) {
m_in = vm_page_grab(object, bo_pindex + idx,
VM_ALLOC_NORMAL | VM_ALLOC_RETRY);
+ vm_page_lock_queues();
if (m_in->valid == 0) {
+ vm_page_unlock_queues();
rv = vm_pager_get_pages(object, &m_in, 1, 0);
if (rv != VM_PAGER_OK) {
printf("vm_freeze_copyopts: cannot read page from file: %lx\n", (long)m_in->pindex);
@@ -1941,10 +1943,10 @@ vm_freeze_copyopts(vm_object_t object, vm_pindex_t froma, vm_pindex_t toa)
}
vm_page_lock_queues();
vm_page_deactivate(m_in);
- vm_page_unlock_queues();
}
pmap_remove_all(m_in);
+ vm_page_unlock_queues();
pmap_copy_page(m_in, m_out);
m_out->valid = m_in->valid;
vm_page_dirty(m_out);
OpenPOWER on IntegriCloud