diff options
author | alc <alc@FreeBSD.org> | 2003-05-03 20:28:26 +0000 |
---|---|---|
committer | alc <alc@FreeBSD.org> | 2003-05-03 20:28:26 +0000 |
commit | f9966ce9e8106e72749aa3390aeefb55e65dbbad (patch) | |
tree | d52e5bb5baa11acea5e8c3eb1883a6a31bbcf702 /sys/vm/vm_object.c | |
parent | 978f22b7c8755ae65aaa9314ff725ab24c4e1089 (diff) | |
download | FreeBSD-src-f9966ce9e8106e72749aa3390aeefb55e65dbbad.zip FreeBSD-src-f9966ce9e8106e72749aa3390aeefb55e65dbbad.tar.gz |
Lock the vm_object on entry to vm_object_vndeallocate().
Diffstat (limited to 'sys/vm/vm_object.c')
-rw-r--r-- | sys/vm/vm_object.c | 5 |
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; } |