git: kernel - More buffer cache / VM coherency work
Matthew Dillon
dillon at crater.dragonflybsd.org
Tue Jan 26 12:53:02 PST 2010
commit 3bb7eedbfb632673b651e472b042d7ae92334bb5
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Tue Jan 26 12:41:03 2010 -0800
kernel - More buffer cache / VM coherency work
* Add a buffer offset argument to nvtruncbuf(). The truncation length and
blocksize for the block containing the truncation point alone are
insufficient since prior blocks might be using a different blocksize.
* Add a buffer offset argument to nvnode_pager_setsize() for the same
reason.
* nvtruncbuf() and nvextendbuf() now bdwrite() the buffer being zero-filled.
This fixes a race where the clean buffer might be discarded and read
from the medias pre-truncation backing store again before the filesystem
has a chance to adjust it.
* nvextendbuf() now takes additional arguments. The block offset for the
old and new blocks must be passed.
* Convert UFS over to the use nv*() API, hopefully solving any remaining
fsx VM/BUF coherency issues.
* Correct bugs with swap_burst_read mode, but leave the mode disabled.
There are still unresolved issues when the mode is enabled.
(Reported-by: YONETANI Tomokazu <qhwt+dfly at les.ath.cx>)
* Fix a bug in vm_prefault() which would leak VM pages, eventually
causing the machine to run out of memory.
Summary of changes:
sys/kern/vfs_vm.c | 84 +++++++++++++++++++++++++++++--------------
sys/sys/vnode.h | 8 +++--
sys/vfs/nfs/nfs_bio.c | 5 ++-
sys/vfs/nfs/nfs_subs.c | 2 +-
sys/vfs/ufs/ffs_inode.c | 42 +++++++++++++---------
sys/vfs/ufs/fs.h | 6 +++
sys/vfs/ufs/ufs_lookup.c | 3 +-
sys/vfs/ufs/ufs_readwrite.c | 8 +++-
sys/vfs/ufs/ufs_vnops.c | 2 +-
sys/vm/swap_pager.c | 21 +++++------
sys/vm/vm_fault.c | 19 ++++++++--
11 files changed, 132 insertions(+), 68 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/3bb7eedbfb632673b651e472b042d7ae92334bb5
--
DragonFly BSD source repository
More information about the Commits
mailing list