[PATCH v2 -tip 0/6] locking: Introduce range reader/writer lock

From: Davidlohr Bueso
Date: Thu Apr 06 2017 - 04:54:59 EST


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.

** What's still pending:
- Debug support (it's been a pain to use lockdep with range locking).
- Renaming the lock; I don't agree that rwlock's should have exclusivity
on such a generic name; maybe they should be called rwspinlocks :)
- lustre 32bit offset caveat.

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.

Laurent, while there are some pending items Peter wants, it might be worth
using this series for any further mmap_sem testing.

Applies on top of tip v4.11-rc5

[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 | 21 +-
.../staging/lustre/lustre/llite/llite_internal.h | 4 +-
drivers/staging/lustre/lustre/llite/llite_lib.c | 3 +-
drivers/staging/lustre/lustre/llite/range_lock.c | 239 ---------
drivers/staging/lustre/lustre/llite/range_lock.h | 82 ---
include/linux/range_rwlock.h | 115 +++++
kernel/locking/Makefile | 2 +-
kernel/locking/locktorture.c | 299 ++++++++---
kernel/locking/range_rwlock.c | 554 +++++++++++++++++++++
lib/Kconfig | 14 -
lib/Kconfig.debug | 1 -
lib/Makefile | 3 +-
15 files changed, 903 insertions(+), 439 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_rwlock.h
create mode 100644 kernel/locking/range_rwlock.c

--
2.12.0