cvs commit: src/sys/kern kern_shutdown.c vfs_bio.c src/sys/sys buf.h src/sys/vfs/gnu/ext2fs ext2_subr.c src/sys/vfs/ufs ffs_subr.c
    Matthew Dillon 
    dillon at apollo.backplane.com
       
    Fri Apr 28 09:34:51 PDT 2006
    
    
  
:>     sys/kern             kern_shutdown.c vfs_bio.c 
:
:The change in kern_shutdown.c breaks the LINT build:
    Fixed!
    I am going through a major buffer cache cleanup, I'm sure more things
    like that will pop up.
    The biggest mess is related to vfs_busy_pages().  I am exploring ways
    on getting rid of it, perhaps by requiring that a buffer be instantiated
    to back any dirty (vnode backed) VM pages.  This is actually a fairly
    straightforward case since once you have such a page the system will
    want to flush it to disk at least once every 30 seconds anyhow.  But
    it would allow me to get rid of all the bogus_page junk in the kernel
    and greatly simplify the buffer cache code.
    This is the chain:
    * Move the I/O command out of the b_flags field and into its own b_cmd
      field
    * Get rid of b_xflags
    * Get rid of VOP_GETPAGES and VOP_PUTPAGES.  Implement a buffer
      acquisition VOP instead from which the pages can be extracted.
      These VOPs have been an eyesore forever and we need a buffer
      acquisition VOP for things like sendfile(), userland VFS, more
      optimally cached front end read() and write(), and so on and so forth.
    * Require that vnode-backed dirty VM pages have associated buffer
      cache buffer(s) (depending on overlap).  This issue only occurs
      when you mmap a file SHARED+RW.  I may also have to require that
      the filesystem block size be a multiple of the PAGE_SIZE for the
      file to be memory-mappable, for this to work cleanly, but I don't
      think that effects anything.
    * Get rid of vfs_busy_pages(), bogus_page, and friends.
    * Clean up b_resid and b_bcount, in particular 'fix' the filesystems to
      always get buffers on filesystem boundaries
    * Get rid of the VM page scanning code used to flush filesystem pages
      (since we now have a valid buffer cache buffer for such pages).
    Not necessarily in that order.
					-Matt
    
    
More information about the Commits
mailing list