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:
parent
49fa1a745e
commit
03fa5b34a0
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user