summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
authoralc <alc@FreeBSD.org>2003-05-03 20:28:26 +0000
committeralc <alc@FreeBSD.org>2003-05-03 20:28:26 +0000
commitf9966ce9e8106e72749aa3390aeefb55e65dbbad (patch)
treed52e5bb5baa11acea5e8c3eb1883a6a31bbcf702 /sys/vm
parent978f22b7c8755ae65aaa9314ff725ab24c4e1089 (diff)
downloadFreeBSD-src-f9966ce9e8106e72749aa3390aeefb55e65dbbad.zip
FreeBSD-src-f9966ce9e8106e72749aa3390aeefb55e65dbbad.tar.gz
Lock the vm_object on entry to vm_object_vndeallocate().
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/vm_object.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index 5a9d7e0..3c7a239 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -399,6 +399,7 @@ vm_object_vndeallocate(vm_object_t object)
struct vnode *vp = (struct vnode *) object->handle;
GIANT_REQUIRED;
+ VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
KASSERT(object->type == OBJT_VNODE,
("vm_object_vndeallocate: not a vnode object"));
KASSERT(vp != NULL, ("vm_object_vndeallocate: missing vp"));
@@ -414,6 +415,7 @@ vm_object_vndeallocate(vm_object_t object)
mp_fixme("Unlocked vflag access.");
vp->v_vflag &= ~VV_TEXT;
}
+ VM_OBJECT_UNLOCK(object);
/*
* vrele may need a vop lock
*/
@@ -440,8 +442,9 @@ vm_object_deallocate(vm_object_t object)
while (object != NULL) {
if (object->type == OBJT_VNODE) {
+ VM_OBJECT_LOCK(object);
vm_object_vndeallocate(object);
- vm_object_unlock(object);
+ mtx_unlock(&Giant);
return;
}
OpenPOWER on IntegriCloud