freebsd-dev/sys/vm
Konstantin Belousov 28f957b8b3 vnode_pager_input: return runningbufspace back
Both vnode_pager_input_smlfs() and vnode_pager_generic_getpages()
increment runningbufspace, but also both delegate io completion handling
on the pbuf to either plain bdone() or filesystem-specific strategy
routine. Accidentally, for e.g. UFS it is g_vfs_strategy()/g_vfs_done().
The later calls bufdone() which handles runningbufspace reclamation.

For plain bdone() io done handler, nothing would return
accounted b_runningbufspace back. Do it in the new
helper vnode_pager_input_bdone(), as well as in
vnode_pager_generic_getpages_done() explicitly.

Note that potential multiple calls to runningbufwakeup() for the same
pbuf or buf completion are safe. runningbufwakeup() clears accounting
for the buffer, so second and later calls are nop.

The problem was found due to tarfs using small vnode pager input but not
g_vfs_strategy().

Reported by:	des
Reviewed by:	markj, sjg
Tested by:	pho
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D39263
2023-03-26 00:55:29 +02:00
..
_vm_phys.h
_vm_radix.h
device_pager.c vm_object_kvme_type(): reimplement by embedding kvme_type into pagerops 2021-05-13 20:10:35 +03:00
memguard.c memguard(9): Fix two typos in source code comments 2022-04-02 13:51:27 +02:00
memguard.h
phys_pager.c vm_object_kvme_type(): reimplement by embedding kvme_type into pagerops 2021-05-13 20:10:35 +03:00
pmap.h
redzone.c redzone: Raise a compile error if KASAN is configured 2021-07-23 10:47:13 -04:00
redzone.h
sg_pager.c vm_object_kvme_type(): reimplement by embedding kvme_type into pagerops 2021-05-13 20:10:35 +03:00
swap_pager.c Provide consistent prototype for swp_pager_meta_free() 2022-12-09 17:23:09 +02:00
swap_pager.h Make swap_pager_freespace() global 2022-12-09 14:15:37 +02:00
uma_core.c uma: Never pass cache zones to memguard 2022-10-19 14:36:36 -04:00
uma_dbg.c
uma_dbg.h
uma_int.h Improve UMA cache reclamation. 2021-05-02 19:45:23 -04:00
uma.h uma: Add UMA_ZONE_UNMANAGED 2022-02-15 09:25:34 -05:00
vm_domainset.c
vm_domainset.h
vm_dumpset.h Fix various places which cast a pointer to a vm_paddr_t or vice versa. 2022-10-03 16:10:41 -07:00
vm_extern.h kmem_malloc/free: Use void * instead of vm_offset_t for kernel pointers. 2022-09-22 15:09:19 -07:00
vm_fault.c vm: add unlocked page lookup before trying vm_fault_soft_fast 2023-03-25 22:14:59 +00:00
vm_glue.c vm: ansify 2023-02-13 18:23:21 +00:00
vm_init.c kmem_malloc/free: Use void * instead of vm_offset_t for kernel pointers. 2022-09-22 15:09:19 -07:00
vm_kern.c kmem_malloc/free: Use void * instead of vm_offset_t for kernel pointers. 2022-09-22 15:09:19 -07:00
vm_kern.h
vm_map.c Rework how shared page related data is stored 2022-07-18 16:27:32 +02:00
vm_map.h Rework how shared page related data is stored 2022-07-18 16:27:32 +02:00
vm_meter.c vmmeter(): Fix detection of the named swap objects 2022-02-02 11:39:58 +02:00
vm_mmap.c vm: Remove handling for OBJT_DEFAULT objects 2022-07-17 07:09:48 -04:00
vm_object.c Drop space in "vm object" lock name to improve wchan 2023-02-15 08:31:17 -05:00
vm_object.h vm: add VM_OBJECT_UNLOCK 2023-03-11 11:08:21 +00:00
vm_page.c vm_page_grab_valid(): clear *mp in case of pager denying page allocation 2022-12-17 19:01:43 +02:00
vm_page.h Add vm_page_any_valid() 2022-10-19 20:24:07 +03:00
vm_pageout.c vm: reduce lock contention when processing vm batchqueues 2022-12-14 14:34:07 -05:00
vm_pageout.h protosw: retire pr_drain and use EVENTHANDLER(9) directly 2022-08-17 11:50:31 -07:00
vm_pagequeue.h vm: centralize VM_BATCHQUEUE_SIZE definition 2023-01-21 14:30:00 -05:00
vm_pager.c vm_pager_allocate(): override resulting object type 2022-12-09 14:17:03 +02:00
vm_pager.h vm_pager: add method to veto page allocation 2022-12-09 14:15:37 +02:00
vm_param.h
vm_phys.c ddb: annotate some commands with DB_CMD_MEMSAFE 2022-07-18 22:06:09 +00:00
vm_phys.h vm_phys: hide vm_phys_set_pool 2021-12-29 11:17:33 -06:00
vm_radix.c
vm_radix.h
vm_reserv.c vm_reserv: use enhanced bitstring for popmaps 2022-01-12 11:03:53 -06:00
vm_reserv.h vm: alloc pages from reserv before breaking it 2021-12-24 12:59:16 -06:00
vm_swapout_dummy.c
vm_swapout.c vm: Use __diagused for variables only used in KASSERT(). 2022-04-13 16:08:20 -07:00
vm_unix.c
vm.h vm/vm.h: cleanup 2022-09-17 11:58:52 +03:00
vnode_pager.c vnode_pager_input: return runningbufspace back 2023-03-26 00:55:29 +02:00
vnode_pager.h