freebsd-skq/sys/vm
Konstantin Belousov 140dedb81c The r241025 fixed the case when a binary, executed from nullfs mount,
was still possible to open for write from the lower filesystem.  There
is a symmetric situation where the binary could already has file
descriptors opened for write, but it can be executed from the nullfs
overlay.

Handle the issue by passing one v_writecount reference to the lower
vnode if nullfs vnode has non-zero v_writecount.  Note that only one
write reference can be donated, since nullfs only keeps one use
reference on the lower vnode.  Always use the lower vnode v_writecount
for the checks.

Introduce the VOP_GET_WRITECOUNT to read v_writecount, which is
currently always bypassed to the lower vnode, and VOP_ADD_WRITECOUNT
to manipulate the v_writecount value, which manages a single bypass
reference to the lower vnode.  Caling the VOPs instead of directly
accessing v_writecount provide the fix described in the previous
paragraph.

Tested by:	pho
MFC after:	3 weeks
2012-11-02 13:56:36 +00:00
..
default_pager.c Replace pointer to "struct uidinfo" with pointer to "struct ucred" 2010-12-02 17:37:16 +00:00
device_pager.c After the PHYS_TO_VM_PAGE() function was de-inlined, the main reason 2012-08-05 14:11:42 +00:00
memguard.c Fix a bug with memguard(9) on 32-bit architectures without a 2012-07-15 20:29:48 +00:00
memguard.h Fix a bug with memguard(9) on 32-bit architectures without a 2012-07-15 20:29:48 +00:00
phys_pager.c Remove unneeded includes of <sys/linker_set.h>. Other headers that use 2011-01-11 13:59:06 +00:00
pmap.h The page flag PGA_WRITEABLE is set and cleared exclusively by the pmap 2012-06-16 18:56:19 +00:00
redzone.c Mark all SYSCTL_NODEs static that have no corresponding SYSCTL_DECLs. 2011-11-07 15:43:11 +00:00
redzone.h
sg_pager.c After the PHYS_TO_VM_PAGE() function was de-inlined, the main reason 2012-08-05 14:11:42 +00:00
swap_pager.c Whitespace cleanup. 2012-09-05 12:24:50 +00:00
swap_pager.h Implement the linprocfs swaps file, providing information about the 2011-08-01 19:12:15 +00:00
uma_core.c Const-ify the zone name argument to uma_zcreate(9). 2012-10-26 17:51:05 +00:00
uma_dbg.c
uma_dbg.h
uma_int.h Const-ify the zone name argument to uma_zcreate(9). 2012-10-26 17:51:05 +00:00
uma.h Const-ify the zone name argument to uma_zcreate(9). 2012-10-26 17:51:05 +00:00
vm_extern.h Eliminate vm_phys_bootstrap_alloc(). It was a failed attempt at 2011-10-30 05:06:14 +00:00
vm_fault.c Commit the actual text provided by Alan, instead of the wrong update 2012-10-24 18:32:37 +00:00
vm_glue.c Move the corresponding MTX_SYSINIT() next to their struct mtx declaration 2012-10-26 17:31:35 +00:00
vm_init.c Introduce exec_alloc_args(). The objective being to encapsulate the 2010-07-27 17:31:03 +00:00
vm_kern.c Move what remains of vm/vm_contig.c into vm/vm_pageout.c, where similar 2012-07-18 05:21:34 +00:00
vm_kern.h
vm_map.c - After r240026 sgrowsiz should be used in a safer maner. 2012-09-03 09:34:46 +00:00
vm_map.h Fix a bug with memguard(9) on 32-bit architectures without a 2012-07-15 20:29:48 +00:00
vm_meter.c - The previous commit (r228449) accidentally moved the vm.stats.vm.* sysctls 2011-12-14 13:25:00 +00:00
vm_mmap.c Remove the support for using non-mpsafe filesystem modules. 2012-10-22 17:50:54 +00:00
vm_object.c Remove the support for using non-mpsafe filesystem modules. 2012-10-22 17:50:54 +00:00
vm_object.h - Add a comment explaining the locking of the cached pages pool held 2012-06-22 18:34:11 +00:00
vm_page.c In general, we call pmap_remove_all() before calling vm_page_cache(). So, 2012-11-01 16:20:02 +00:00
vm_page.h Rework the known mutexes to benefit about staying on their own 2012-10-31 18:07:18 +00:00
vm_pageout.c In general, we call pmap_remove_all() before calling vm_page_cache(). So, 2012-11-01 16:20:02 +00:00
vm_pageout.h Move what remains of vm/vm_contig.c into vm/vm_pageout.c, where similar 2012-07-18 05:21:34 +00:00
vm_pager.c vm_pager_object_lookup: small performance optimization 2012-05-23 12:51:49 +00:00
vm_pager.h Add new pager type, OBJT_MGTDEVICE. It provides the device pager 2012-05-12 20:49:58 +00:00
vm_param.h On Alan's advice, rather than do a wholesale conversion on a single 2010-04-30 00:46:43 +00:00
vm_phys.c Add a facility to register a range of physical addresses to be used 2012-05-12 20:42:56 +00:00
vm_phys.h Add a facility to register a range of physical addresses to be used 2012-05-12 20:42:56 +00:00
vm_reserv.c Correct an off-by-one error in vm_reserv_alloc_contig() that resulted in 2012-07-15 21:46:19 +00:00
vm_reserv.h Introduce vm_reserv_alloc_contig() and teach vm_page_alloc_contig() how to 2011-12-05 18:29:25 +00:00
vm_unix.c Control the execution permission of the readable segments for 2011-10-15 12:35:18 +00:00
vm_zeroidle.c Split P_NOLOAD into a per-thread flag (TDF_NOLOAD). 2009-11-03 16:46:52 +00:00
vm.h Add new pager type, OBJT_MGTDEVICE. It provides the device pager 2012-05-12 20:49:58 +00:00
vnode_pager.c The r241025 fixed the case when a binary, executed from nullfs mount, 2012-11-02 13:56:36 +00:00
vnode_pager.h Account the writeable shared mappings backed by file in the vnode 2012-02-23 21:07:16 +00:00