commit 33930dfcf0aab8a1475a9e8edcfcea28e6a2dfbb Author: Matthew Dillon <dil...@apollo.backplane.com> Date: Wed Feb 12 19:39:12 2020 -0800
kernel - Improve tmpfs support * When a file in tmpfs is truncated to a size that is not on a block boundary, or extended (but not written) to a size that is not on a block boundary, the nvextendbuf() and nvtruncbuf() functions must modify the contents of the straddling buffer and bdwrite(). However, a bdwrite() for a tmpfs buffer will result in a dirty buffer cache buffer and likely force it to be cycled out to swap relatively soon under a modest load. This is not desirable if there is no memory pressure present to force it out. Tmpfs almost always uses buwrite() in order to leave the buffer 'clean' (the underlying VM pages are dirtied instead), to prevent unecessary paging of tmpfs data to swap when the buffer gets recycled or the vnode cycles out. * Add support for calling buwrite() in these functions by changing the 'trivial' boolean into a flags variable. * Tmpfs now passes the appropriate flag, preventing the undesirable behavior. Summary of changes: sys/kern/vfs_vm.c | 24 +++++++++++++--------- sys/sys/vnode.h | 10 ++++++++-- sys/vfs/hammer/hammer_vnops.c | 2 +- sys/vfs/nfs/nfs.h | 2 +- sys/vfs/nfs/nfs_bio.c | 10 +++++----- sys/vfs/tmpfs/tmpfs.h | 1 + sys/vfs/tmpfs/tmpfs_subr.c | 46 ++++++++++++++++++++++++++++++++++++++----- sys/vfs/tmpfs/tmpfs_vfsops.c | 5 ++++- sys/vfs/tmpfs/tmpfs_vnops.c | 28 +++++++++++++++----------- sys/vfs/tmpfs/tmpfs_vnops.h | 1 + 10 files changed, 93 insertions(+), 36 deletions(-) http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/33930dfcf0aab8a1475a9e8edcfcea28e6a2dfbb -- DragonFly BSD source repository