DragonFly commits List (threaded) for 2012-08
git: kernel - Change lockmgr LK_SHARED behavior to fix improper recursion return
Author: Matthew Dillon <firstname.lastname@example.org>
Date: Thu Aug 16 17:40:38 2012 -0700
kernel - Change lockmgr LK_SHARED behavior to fix improper recursion return
* When obtaining a LK_SHARED lock in a situation where you already own the
lock LK_EXCLUSIVE, lockmgr would downgrade the lock to shared.
This creates a very serious problem when large procedural recursions get
a lock that is already being held exclusively but request a shared lock.
When these recursions return the original top level will find its lock is
no longer exclusive.
* This problem occured with vnode locks when a VOP_WRITE operation on a mmap'd
space causes a VM fault which then turns around and issues a read().
When the fault returns the vnode wound up locked shared instead of
* Fix the problem by NOT downgrading an exclusive lock to shared when
recursing on LK_SHARED. Simply add another count to the exclusive
Summary of changes:
sys/kern/kern_lock.c | 29 +++++++++++++++++++++++++++--
sys/vfs/ufs/ffs_rawread.c | 14 --------------
2 files changed, 27 insertions(+), 16 deletions(-)
DragonFly BSD source repository