Lock the vnode around clearing of VV_TEXT flag. Remove mp_fixme() note

mentioning that vnode lock is needed.

Reviewed by:	alc
Tested by:	pho
MFC after:	1 week
This commit is contained in:
Konstantin Belousov 2011-02-13 21:52:26 +00:00
parent 49fa1a745e
commit 03fa5b34a0

View File

@ -437,16 +437,21 @@ vm_object_vndeallocate(vm_object_t object)
}
#endif
object->ref_count--;
if (object->ref_count == 0) {
mp_fixme("Unlocked vflag access.");
vp->v_vflag &= ~VV_TEXT;
if (object->ref_count > 1) {
object->ref_count--;
VM_OBJECT_UNLOCK(object);
/* vrele may need the vnode lock. */
vrele(vp);
} else {
VM_OBJECT_UNLOCK(object);
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY);
VM_OBJECT_LOCK(object);
object->ref_count--;
if (object->ref_count == 0)
vp->v_vflag &= ~VV_TEXT;
VM_OBJECT_UNLOCK(object);
vput(vp);
}
VM_OBJECT_UNLOCK(object);
/*
* vrele may need a vop lock
*/
vrele(vp);
}
/*