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