freebsd-dev/sys/compat
Konstantin Belousov 78022527bb Switch to use shared vnode locks for text files during image activation.
kern_execve() locks text vnode exclusive to be able to set and clear
VV_TEXT flag. VV_TEXT is mutually exclusive with the v_writecount > 0
condition.

The change removes VV_TEXT, replacing it with the condition
v_writecount <= -1, and puts v_writecount under the vnode interlock.
Each text reference decrements v_writecount.  To clear the text
reference when the segment is unmapped, it is recorded in the
vm_map_entry backed by the text file as MAP_ENTRY_VN_TEXT flag, and
v_writecount is incremented on the map entry removal

The operations like VOP_ADD_WRITECOUNT() and VOP_SET_TEXT() check that
v_writecount does not contradict the desired change.  vn_writecheck()
is now racy and its use was eliminated everywhere except access.
Atomic check for writeability and increment of v_writecount is
performed by the VOP.  vn_truncate() now increments v_writecount
around VOP_SETATTR() call, lack of which is arguably a bug on its own.

nullfs bypasses v_writecount to the lower vnode always, so nullfs
vnode has its own v_writecount correct, and lower vnode gets all
references, since object->handle is always lower vnode.

On the text vnode' vm object dealloc, the v_writecount value is reset
to zero, and deadfs vop_unset_text short-circuit the operation.
Reclamation of lowervp always reclaims all nullfs vnodes referencing
lowervp first, so no stray references are left.

Reviewed by:	markj, trasz
Tested by:	mjg, pho
Sponsored by:	The FreeBSD Foundation
MFC after:	1 month
Differential revision:	https://reviews.freebsd.org/D19923
2019-05-05 11:20:43 +00:00
..
cloudabi Introduce funlinkat syscall that always us to check if we are removing 2019-04-06 09:34:26 +00:00
cloudabi32 Add helper functions to copy strings into struct image_args. 2018-11-29 21:00:56 +00:00
cloudabi64 Add helper functions to copy strings into struct image_args. 2018-11-29 21:00:56 +00:00
freebsd32 make sysent after r346273 (readlinkat arg correction) 2019-04-26 12:55:52 +00:00
ia32 Remove sv_pagesize, originally introduced with r100384. 2019-03-01 16:16:38 +00:00
lindebugfs import linux debugfs support 2019-02-23 20:56:41 +00:00
linprocfs Decode more CPU flags in cpuinfo. 2019-05-03 08:27:03 +00:00
linsysfs Remove unneeded includes. 2019-05-02 09:00:36 +00:00
linux Switch to use shared vnode locks for text files during image activation. 2019-05-05 11:20:43 +00:00
linuxkpi/common Fix regression issue after r346645 in the LinuxKPI. 2019-05-04 09:47:01 +00:00
ndis Fix compilation with 'option NDISAPI + device ndis' and 2019-01-30 11:40:12 +00:00
netbsd sys/compat: further adoption of SPDX licensing ID tags. 2017-11-27 15:13:23 +00:00
x86bios x86bios: use M_NOWAIT with mallocs 2018-09-13 07:04:00 +00:00