git: kernel - Attempt to fix cluster pbuf deadlock on recursive filesystems
    Matthew Dillon 
    dillon at crater.dragonflybsd.org
       
    Mon Nov  7 19:04:54 PST 2016
    
    
  
commit d84f6fa13c474015da98ec341ce61ed6d737bcae
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Mon Nov 7 18:56:34 2016 -0800
    kernel - Attempt to fix cluster pbuf deadlock on recursive filesystems
    
    * Change global pbuf count limits (used primarily for clustered I/O) to
      per-mount and per-device limits.  The per-mount / per-device limit
      is set to nswbuf_kva / 10, allowing 10 different entities to obtain
      pbufs concurrently without interference.
    
    * This change goes a long way towards fixing deadlocks that could occur
      with the old global system (a global limit of nswbuf_kva / 2) when
      the I/O system recurses through a virtual block device or filesystem.
      Two examples of virtual block devices are the 'vn' device and the crypto
      layer.
    
    * We also note that even normal filesystem read and write I/O strategy calls
      will recurse at least once to dive the underlying block device.  DFly also
      had issues with pbuf hogging by one mount causing unnecessary stalls
      in other mounts.  This fix also prevents pbuf hogging.
    
    * Remove unused internal O_MAPONREAD flag.
    
    Reported-by: htse, multiple
    Testing-by: htse, dillon
Summary of changes:
 sys/kern/vfs_cluster.c    | 43 +++++++++++++++++++++++++++++++++++--------
 sys/kern/vfs_conf.c       |  1 +
 sys/kern/vfs_lock.c       |  1 +
 sys/kern/vfs_mount.c      |  2 ++
 sys/kern/vfs_syscalls.c   |  1 +
 sys/kern/vfs_vnops.c      |  2 +-
 sys/sys/buf.h             |  6 ++++++
 sys/sys/fcntl.h           | 10 ++++++----
 sys/sys/mount.h           |  2 +-
 sys/sys/vnode.h           |  1 +
 sys/vfs/ufs/ffs_rawread.c | 20 +++++++-------------
 sys/vm/vm_pager.c         | 44 ++++++++++++++------------------------------
 12 files changed, 76 insertions(+), 57 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/d84f6fa13c474015da98ec341ce61ed6d737bcae
-- 
DragonFly BSD source repository
    
    
More information about the Commits
mailing list