Change locking requirements for VOP_UNSET_TEXT().
Require the vnode to be locked for the VOP_UNSET_TEXT() call. This will be used by the following bug fix for a tmpfs issue. Tested by: sbruno, pho (previous version) Sponsored by: The FreeBSD Foundation MFC after: 1 week
This commit is contained in:
parent
e7c1709aaf
commit
bb9e2184f0
@ -472,8 +472,13 @@ cleanup:
|
||||
locked = false;
|
||||
VOP_CLOSE(vp, FREAD, td->td_ucred, td);
|
||||
}
|
||||
if (textset)
|
||||
if (textset) {
|
||||
if (!locked) {
|
||||
locked = true;
|
||||
VOP_LOCK(vp, LK_SHARED | LK_RETRY);
|
||||
}
|
||||
VOP_UNSET_TEXT_CHECKED(vp);
|
||||
}
|
||||
if (locked)
|
||||
VOP_UNLOCK(vp, 0);
|
||||
|
||||
|
@ -695,7 +695,7 @@ vop_set_text {
|
||||
};
|
||||
|
||||
|
||||
%% vop_unset_text vp = = =
|
||||
%% vop_unset_text vp L L L
|
||||
|
||||
vop_unset_text {
|
||||
IN struct vnode *vp;
|
||||
|
@ -547,12 +547,20 @@ vm_map_entry_set_vnode_text(vm_map_entry_t entry, bool add)
|
||||
"entry %p, object %p, add %d", entry, object, add));
|
||||
}
|
||||
if (vp != NULL) {
|
||||
if (add)
|
||||
if (add) {
|
||||
VOP_SET_TEXT_CHECKED(vp);
|
||||
else
|
||||
VM_OBJECT_RUNLOCK(object);
|
||||
} else {
|
||||
vhold(vp);
|
||||
VM_OBJECT_RUNLOCK(object);
|
||||
vn_lock(vp, LK_SHARED | LK_RETRY);
|
||||
VOP_UNSET_TEXT_CHECKED(vp);
|
||||
VOP_UNLOCK(vp, 0);
|
||||
vdrop(vp);
|
||||
}
|
||||
} else {
|
||||
VM_OBJECT_RUNLOCK(object);
|
||||
}
|
||||
VM_OBJECT_RUNLOCK(object);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
x
Reference in New Issue
Block a user