summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_object.c
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2002-07-28 19:01:38 +0000
committeralc <alc@FreeBSD.org>2002-07-28 19:01:38 +0000
commitd1b2ba5197cad1a372122bc917dcd843f42811a1 (patch)
tree73bdd0e7361ad63be3ada3a444382b8703934375 /sys/vm/vm_object.c
parent2d279f09c9cb47443b87f385aab814479ed33ac9 (diff)
downloadFreeBSD-src-d1b2ba5197cad1a372122bc917dcd843f42811a1.zip
FreeBSD-src-d1b2ba5197cad1a372122bc917dcd843f42811a1.tar.gz
o Lock page queue accesses by vm_page_free().
Diffstat (limited to 'sys/vm/vm_object.c')
-rw-r--r--sys/vm/vm_object.c10
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;
OpenPOWER on IntegriCloud