cvs commit: src/sys/vm swap_pager.c vm_pageout.c vnode_pager.c

Matthew Dillon dillon at
Mon Apr 28 14:17:49 PDT 2008

dillon      2008/04/28 14:16:27 PDT

DragonFly src repository

  Modified files:
    sys/vm               swap_pager.c vm_pageout.c vnode_pager.c 
  Paging and swapping system fixes.
  * Do not try to free a VM page after a failed IO read from swap.  It is
    illegal to free a VM page from an interrupt.  Just deactivate it instead.
  * Do not attempt to move a VM page into the cache queue after a successful
    pageout from the vnode or swap pagers, and do not try to adjust page
    protections to read-only (they should already be read-only).  Both
    operations require making serious pmap calls which we really do not
    want to do from an interrupt.
    Instead, leave the page on its current queue or, if the system is low
    on pages, deactivate the page.
  The pmap protection code is supposed to be runnable from an interrupt but
  testing with vkernels shows program corruption occuring under severe paging
  loads.  Pmap protection changes were only being made from pageout interrupts.
  brelse() itself, which can also be called from an interrupt via biodone(),
  does not make such changes for asynchronous I/O.
  With these changes in place the program corruption stopped or has been
  greatly reduced.  Further testing in a 64MB vkernel environment is ongoing.
  In addition, trying to move the page after a completed pageout/swappout
  to the cache queue was improperly depressing the priority of read-heavy
  pages.  Under severe paging loads we now only deactivate the page.  Plus
  moving a page to the cache queue causes pmap operations to be run which
  we again do not want to run from an interrupt.
  Revision  Changes    Path
  1.30      +25 -9     src/sys/vm/swap_pager.c
  1.34      +9 -0      src/sys/vm/vm_pageout.c
  1.41      +6 -0      src/sys/vm/vnode_pager.c

More information about the Commits mailing list