v3->v4: - Add a new patch 2 to use WRITE_ONCE() for all rwsem->owner stores to prevent store tearing. v2->v3: - Make minor code changes as suggested by PeterZ & Peter Hurley. - Add 2 minor patches (#2 & #3) to improve the rwsem code - Add a 4th patch to streamline the rwsem_optimistic_spin() code. v1->v2: - Add rwsem_is_reader_owned() helper & rename rwsem_reader_owned() to rwsem_set_reader_owned(). - Add more comments to clarify the purpose of some of the code changes. Patch 1 is the main patch of this series. Patch 2 protects against store tearing of rwsem->owner field which can cause problem when a reader tries to dereference it. Patch 3 eliminates redundant wakeup caused by a reader waking itself. Patch 4 improves the efficiency of the reader wakeup code. Patch 5 streamlines the rwsem_optimistic_spin() to make it simpler. Waiman Long (5): locking/rwsem: Add reader-owned state to the owner field locking/rwsem: Protect all writes to owner by WRITE_ONCE() locking/rwsem: Don't wake up one's own task locking/rwsem: Improve reader wakeup code locking/rwsem: Streamline the rwsem_optimistic_spin() code kernel/locking/rwsem-xadd.c | 75 ++++++++++++++++++++++++------------------ kernel/locking/rwsem.c | 8 +++- kernel/locking/rwsem.h | 52 ++++++++++++++++++++++++++++- 3 files changed, 99 insertions(+), 36 deletions(-)