git: kernel - Fix not-quite-nonblocking VX lock in allocfreevnode()

Matthew Dillon dillon at crater.dragonflybsd.org
Thu Jan 14 21:58:30 PST 2010


commit 298693f7a0177ad2291be7a6c52371fb311b4a17
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Thu Jan 14 21:51:45 2010 -0800

    kernel - Fix not-quite-nonblocking VX lock in allocfreevnode()
    
    * Introduce LK_NOSPINWAIT to tell lockmgr() to not even spin on the
      spinlock if it can't get it immediately.
    
    * There is a lock order reversal between vfs_spin and vp->v_spinlock
      where vx_lock_nonblock() can deadlock in allocfreevnode().  Normally
      I'd vhold() the vnode but the freelist code is rather fragile and I
      don't want to have to vdrop() later on.  So instead use LK_NOSPINWAIT
      to avoid the situation.
    
    * This is a hack.

Summary of changes:
 sys/kern/kern_lock.c |    9 ++++++++-
 sys/kern/vfs_lock.c  |    7 ++++++-
 sys/sys/lock.h       |    2 +-
 3 files changed, 15 insertions(+), 3 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/298693f7a0177ad2291be7a6c52371fb311b4a17


-- 
DragonFly BSD source repository





More information about the Commits mailing list