Skip to content
  • Jason Low's avatar
    locking/rwsem: Fix lock optimistic spinning when owner is not running · 9198f6ed
    Jason Low authored and Ingo Molnar's avatar Ingo Molnar committed
    Ming reported soft lockups occurring when running xfstest due to
    the following tip:locking/core commit:
    
      b3fd4f03
    
     ("locking/rwsem: Avoid deceiving lock spinners")
    
    When doing optimistic spinning in rwsem, threads should stop
    spinning when the lock owner is not running. While a thread is
    spinning on owner, if the owner reschedules, owner->on_cpu
    returns false and we stop spinning.
    
    However, this commit essentially caused the check to get
    ignored because when we break out of the spin loop due to
    !on_cpu, we continue spinning if sem->owner != NULL.
    
    This patch fixes this by making sure we stop spinning if the
    owner is not running. Furthermore, just like with mutexes,
    refactor the code such that we don't have separate checks for
    owner_running(). This makes it more straightforward in terms of
    why we exit the spin on owner loop and we would also avoid
    needing to "guess" why we broke out of the loop to make this
    more readable.
    
    Reported-and-tested-by: default avatarMing Lei <ming.lei@canonical.com>
    Signed-off-by: default avatarJason Low <jason.low2@hp.com>
    Acked-by: default avatarDavidlohr Bueso <dave@stgolabs.net>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Dave Jones <davej@codemonkey.org.uk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Michel Lespinasse <walken@google.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Sasha Levin <sasha.levin@oracle.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tim Chen <tim.c.chen@linux.intel.com>
    Link: http://lkml.kernel.org/r/1425714331.2475.388.camel@j-VirtualBox
    
    
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    9198f6ed