summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-04-26 19:36:19 +0000
committeralc <alc@FreeBSD.org>2003-04-26 19:36:19 +0000
commit4f5c780f99402280fe4832361f12e924dc25df04 (patch)
treee00cbf8f47227227f31db23bae0582cdc2e7558c /sys/vm
parenta23076390bedf5de8125b8837baa6fdd96a82aee (diff)
downloadFreeBSD-src-4f5c780f99402280fe4832361f12e924dc25df04.zip
FreeBSD-src-4f5c780f99402280fe4832361f12e924dc25df04.tar.gz
- Lock the vm_object on entry to vm_object_terminate().
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_object.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index 944d033..77c50de 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -502,6 +502,7 @@ vm_object_deallocate(vm_object_t object)
return;
}
doterm:
+ VM_OBJECT_LOCK(object);
temp = object->backing_object;
if (temp) {
TAILQ_REMOVE(&temp->shadow_head, object, shadow_list);
@@ -516,6 +517,8 @@ doterm:
*/
if ((object->flags & OBJ_DEAD) == 0)
vm_object_terminate(object);
+ else
+ VM_OBJECT_UNLOCK(object);
object = temp;
}
vm_object_unlock(object);
@@ -534,12 +537,11 @@ vm_object_terminate(vm_object_t object)
vm_page_t p;
int s;
- GIANT_REQUIRED;
+ VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
/*
* Make sure no one uses us.
*/
- VM_OBJECT_LOCK(object);
vm_object_set_flag(object, OBJ_DEAD);
/*
OpenPOWER on IntegriCloud