DragonFly commits List (threaded) for 2008-01
DragonFly BSD
DragonFly commits List (threaded) for 2008-01
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

cvs commit: src/sys/kern vfs_bio.c src/sys/sys buf.h src/sys/vfs/nfs nfs_bio.c

From: Matthew Dillon <dillon@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 9 Jan 2008 23:34:04 -0800 (PST)

dillon      2008/01/09 23:34:04 PST

DragonFly src repository

  Modified files:
    sys/kern             vfs_bio.c 
    sys/sys              buf.h 
    sys/vfs/nfs          nfs_bio.c 
  Fix buffer cache deadlocks by splitting dirty buffers into two categories:
  Light weight dirty buffers and heavy weight dirty buffers.  Add a second
  buffer cache flushing daemon to deal with the heavy weight dirty buffers.
  Currently only HAMMER uses the new feature, but it can also easily be used
  by UFS in the future.
  Buffer cache deadlocks can occur in low memory situations where the buffer
  cache tries to flush out dirty buffers and deadlocks when the act of
  flushing a dirty buffer requires additional buffers to be acquired.  Because
  there was only one buffer flushing daemon, a deadlock on a heavy weight buffer
  prevented any further buffer flushes, whether light or heavy weight, and
  wound up deadlocking the entire system.
  Giving the heavy weight buffers their own daemon solves the problem by
  allowing light weight buffers to continue to be flushed even if a stall
  occurs on a heavy weight buffer.  The numbers of dirty heavy weight buffers
  is limited to ensure that enough light weight buffers are available.
  This is primarily implemented by changing getblk()'s mostly unused slpflag
  parameter to a new blkflags parameter and adding a new buffer cache queue
  Revision  Changes    Path
  1.96      +200 -59   src/sys/kern/vfs_bio.c
  1.42      +15 -1     src/sys/sys/buf.h
  1.42      +1 -1      src/sys/vfs/nfs/nfs_bio.c


[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]