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