rwsem: wake queued readers when writer blocks on active read lock
authorMichel Lespinasse <>
Tue, 10 Aug 2010 00:21:19 +0000 (17:21 -0700)
committerLinus Torvalds <>
Tue, 10 Aug 2010 03:45:11 +0000 (20:45 -0700)
This change addresses the following situation:

- Thread A acquires the rwsem for read
- Thread B tries to acquire the rwsem for write, notices there is already
  an active owner for the rwsem.
- Thread C tries to acquire the rwsem for read, notices that thread B already
  tried to acquire it.
- Thread C grabs the spinlock and queues itself on the wait queue.
- Thread B grabs the spinlock and queues itself behind C. At this point A is
  the only remaining active owner on the rwsem.

In this situation thread B could notice that it was the last active writer
on the rwsem, and decide to wake C to let it proceed in parallel with A
since they both only want the rwsem for read.

Signed-off-by: Michel Lespinasse <>
Acked-by: David Howells <>
Cc: Mike Waychison <>
Cc: Suleiman Souhlal <>
Cc: Ying Han <>
Cc: Ingo Molnar <>
Cc: Thomas Gleixner <>
Cc: "H. Peter Anvin" <>
Cc: Peter Zijlstra <>
Signed-off-by: Andrew Morton <>
Signed-off-by: Linus Torvalds <>

No differences found