freebsd-dev/sys/vm
Alan Cox 0c3a489325 Break up vm_fault()'s implementation of the read-ahead and delete-behind
optimizations into two distinct pieces.  The first piece consists of the
code that should only be performed once per page fault and requires the map
to be locked.  The second piece consists of the code that should be
performed each time a pager is called on an object in the shadow chain.
(This second piece expects the map to be unlocked.)

Previously, the entire implementation could be executed multiple times.
Moreover, the second and subsequent executions would occur with the map
unlocked.  Usually, the ensuing unsynchronized accesses to the map were
harmless because the map was not changing.  Nonetheless, it was possible for
a use-after-free error to occur, where vm_fault() wrote to a freed map
entry.  This change corrects that problem.

Reported by:	avg
Reviewed by:	kib
MFC after:	3 days
Sponsored by:	EMC / Isilon Storage Division
2016-07-18 04:20:26 +00:00
..
_vm_radix.h
default_pager.c
device_pager.c
memguard.c
memguard.h
phys_pager.c
pmap.h
redzone.c
redzone.h
sg_pager.c
swap_pager.c Fix inconsistent locking of the swap pager named objects list. 2016-06-13 03:42:46 +00:00
swap_pager.h
uma_core.c Replace a number of conflations of mp_ncpus and mp_maxid with either 2016-07-06 14:09:49 +00:00
uma_dbg.c
uma_dbg.h
uma_int.h Autotune the number of pages set aside for UMA startup based on the number 2016-07-07 18:37:12 +00:00
uma.h Replace a number of conflations of mp_ncpus and mp_maxid with either 2016-07-06 14:09:49 +00:00
vm_domain.c
vm_domain.h
vm_extern.h
vm_fault.c Break up vm_fault()'s implementation of the read-ahead and delete-behind 2016-07-18 04:20:26 +00:00
vm_glue.c Fix a LOR between vnode locks and allproc_lock. 2016-06-22 20:15:37 +00:00
vm_init.c
vm_kern.c
vm_kern.h
vm_map.c Change the type of the map entry's next_read field from a vm_pindex_t to a 2016-07-07 20:58:16 +00:00
vm_map.h Change the type of the map entry's next_read field from a vm_pindex_t to a 2016-07-07 20:58:16 +00:00
vm_meter.c The vmtotal sysctl handler marks active vm objects to calculate 2016-06-21 17:49:33 +00:00
vm_mmap.c When mmap(2) is used with a vnode, capture vnode attributes in the 2016-07-10 11:49:10 +00:00
vm_object.c In vgonel(), postpone setting BO_DEAD until VOP_RECLAIM() is called, 2016-07-11 14:19:09 +00:00
vm_object.h The vmtotal sysctl handler marks active vm objects to calculate 2016-06-21 17:49:33 +00:00
vm_page.c Autotune the number of pages set aside for UMA startup based on the number 2016-07-07 18:37:12 +00:00
vm_page.h Add a comment noting locking regime for vm_page_xunbusy(). 2016-06-23 08:27:38 +00:00
vm_pageout.c Fix a LOR between vnode locks and allproc_lock. 2016-06-22 20:15:37 +00:00
vm_pageout.h
vm_pager.c
vm_pager.h
vm_param.h
vm_phys.c
vm_phys.h
vm_radix.c
vm_radix.h
vm_reserv.c
vm_reserv.h
vm_unix.c
vm_zeroidle.c
vm.h
vnode_pager.c Clarify the vnode_destroy_vobject() logic handling for already terminated 2016-07-05 11:21:02 +00:00
vnode_pager.h