git: kernel - Fix rare lockmgr() state transition

Matthew Dillon dillon at crater.dragonflybsd.org
Sat Sep 30 18:12:36 PDT 2017


commit 616bc26b4964cc05c0649e6fa65cc5eb2f5b50f4
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sat Sep 30 15:12:30 2017 -0700

    kernel - Fix rare lockmgr() state transition
    
    * When lockmgr() is releasing the last count on an exclusive lock
      with an upgrade request pending, and the atomic op fails, the
      code fails to properly retry.  Fixed by properly retrying.
    
    * This situation should not be possible to even get into, hence 'rare'.
      It requires UPREQ to be set while the lock is being held exclusively,
      which should never be possible because there is no shared lock holder
      in that case who might attempt to upgrade.
    
      I checked race conditions when multiple shared holders attempt
      to upgrade but all that happens is that one will release and
      acquire a normal exclusive lock instead.

Summary of changes:
 sys/kern/kern_lock.c | 29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/616bc26b4964cc05c0649e6fa65cc5eb2f5b50f4


-- 
DragonFly BSD source repository


More information about the Commits mailing list