Changes from v2 (https://lwn.net/Articles/719182/):
  - Renamed to range_lock
  - Added lockdep support with rwsem semantics
  - Fix range_lock_set_reader() being overwritten
  - Improved documentation wrt ordering and fairness as
    well as overall description (less implementation details).

Changes from v1 (https://lwn.net/Articles/716383/), all in patch 2:
  - s/EXPORT_SYMBOL/EXPORT_SYMBOL_GPL
  - Made the tree walks a foreach loop, instead of while.
  - Fixed signal_pending() lockup issue for unaccounted waiters.
  - Fixed initialization macros.
  - Check condition before signal_pending in loop.
  - Make building the interval-tree unconditionally a separate patch.
  - More/better documentation.
  - Added jack's reviewed-by.
  - Renamed inf to full.

Hi,

Here's a very tardy proposal for enhancements to Jan's original[1] range lock
using interval trees. Because at some point it would be awesome to switch 
mmap_sem
from rwsem to range rwlock, I've focused on making it sharable and performance
enhancements reducing the performance delta between this and conventional locks 
as
much as possible -- details in patch 2.

The rest of the patches adds support for testing the new lock and actually
makes use of it for lustre. It has passed quite a bit of artificial pounding and
I believe/hope it is in shape to consider.

Applies on top of tip v4.12-rc1

[1] https://lkml.org/lkml/2013/1/31/483

Thanks!

Davidlohr Bueso (6):
  interval-tree: Build unconditionally
  locking: Introduce range reader/writer lock
  locking/locktorture: Fix rwsem reader_delay
  locking/locktorture: Fix num reader/writer corner cases
  locking/locktorture: Support range rwlocks
  staging/lustre: Use generic range rwlock

 drivers/gpu/drm/Kconfig                            |   2 -
 drivers/gpu/drm/i915/Kconfig                       |   1 -
 drivers/staging/lustre/lustre/llite/Makefile       |   2 +-
 drivers/staging/lustre/lustre/llite/file.c         |  16 +-
 .../staging/lustre/lustre/llite/llite_internal.h   |   2 +-
 drivers/staging/lustre/lustre/llite/range_lock.c   | 239 -------
 drivers/staging/lustre/lustre/llite/range_lock.h   |  82 ---
 include/linux/lockdep.h                            |  33 +
 include/linux/range_lock.h                         | 181 ++++++
 kernel/locking/Makefile                            |   2 +-
 kernel/locking/locktorture.c                       | 299 ++++++---
 kernel/locking/range_lock.c                        | 690 +++++++++++++++++++++
 lib/Kconfig                                        |  14 -
 lib/Kconfig.debug                                  |   1 -
 lib/Makefile                                       |   3 +-
 15 files changed, 1133 insertions(+), 434 deletions(-)
 delete mode 100644 drivers/staging/lustre/lustre/llite/range_lock.c
 delete mode 100644 drivers/staging/lustre/lustre/llite/range_lock.h
 create mode 100644 include/linux/range_lock.h
 create mode 100644 kernel/locking/range_lock.c

-- 
2.12.0

Reply via email to