svn commit: r351474 - in stable/12/sys: compat/linux kern vm
Konstantin Belousov
kib at FreeBSD.org
Sun Aug 25 06:19:53 UTC 2019
Author: kib
Date: Sun Aug 25 06:19:51 2019
New Revision: 351474
URL: https://svnweb.freebsd.org/changeset/base/351474
Log:
MFC r351194:
Change locking requirements for VOP_UNSET_TEXT().
Modified:
stable/12/sys/compat/linux/linux_misc.c
stable/12/sys/kern/vnode_if.src
stable/12/sys/vm/vm_map.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/compat/linux/linux_misc.c
==============================================================================
--- stable/12/sys/compat/linux/linux_misc.c Sun Aug 25 06:14:00 2019 (r351473)
+++ stable/12/sys/compat/linux/linux_misc.c Sun Aug 25 06:19:51 2019 (r351474)
@@ -494,8 +494,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);
Modified: stable/12/sys/kern/vnode_if.src
==============================================================================
--- stable/12/sys/kern/vnode_if.src Sun Aug 25 06:14:00 2019 (r351473)
+++ stable/12/sys/kern/vnode_if.src Sun Aug 25 06:19:51 2019 (r351474)
@@ -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;
Modified: stable/12/sys/vm/vm_map.c
==============================================================================
--- stable/12/sys/vm/vm_map.c Sun Aug 25 06:14:00 2019 (r351473)
+++ stable/12/sys/vm/vm_map.c Sun Aug 25 06:19:51 2019 (r351474)
@@ -546,12 +546,20 @@ vm_map_entry_set_vnode_text(vm_map_entry_t entry, bool
"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
More information about the svn-src-stable-12
mailing list