[PATCH 00/17] Provide lockdep tracking for bit spin locks

From: Matthew Wilcox (Oracle)
Date: Thu Apr 08 2021 - 22:53:02 EST


Since bit spin locks are only a single bit, there's nowhere to put
a lockdep map. Fortunately, all bit spin locks in the kernel are
conceptually in only a few classes of lock, and by introducing the
split_lock as somewhere to store the lockdep_map, we can track each bit
spin lock's dependencies.

This split_lock would also give us somewhere to queue waiters, should we
choose to do that. Or a centralised place to handle PREEMPT_RT mutexes.
But I'll leave that for someone who knows what they're doing; for now
this keeps the same implementation.

Matthew Wilcox (Oracle) (17):
x86: Rename split_lock_init to sld_init
locking: Add split_lock
bit_spinlock: Prepare for split_locks
hlist_bl: Prepare for split_locks
dm-snap: Add dm_exceptional_lock
dcache: Add d_hash_lock
fscache: Add cookie_hash_lock
gfs2: Add qd_hash_lock
mbcache: Add mb_cache_lock
hlist_bl: Make the split_lock parameter mandatory
s390: Add airq_iv_lock
zram: Add zram_table_lock
jbd2: Add jbd2_jh_lock
slub: Add slab_page_lock
zsmalloc: Add zs_pin_lock
rhashtable: Convert to split_lock
bit_spinlock: Track bit spin locks with lockdep

arch/s390/include/asm/airq.h | 5 +++--
arch/x86/kernel/cpu/intel.c | 6 +++---
drivers/block/zram/zram_drv.c | 8 ++++---
drivers/md/dm-snap.c | 10 +++++----
drivers/s390/cio/airq.c | 3 +++
fs/dcache.c | 25 +++++++++++-----------
fs/fscache/cookie.c | 13 ++++++------
fs/gfs2/quota.c | 5 +++--
fs/jbd2/journal.c | 18 +++++++++-------
fs/mbcache.c | 25 +++++++++++-----------
include/linux/bit_spinlock.h | 39 ++++++++++++++++++++++++++++++-----
include/linux/jbd2.h | 10 +++++----
include/linux/list_bl.h | 15 ++++++++++----
include/linux/rhashtable.h | 20 +++++++-----------
include/linux/split_lock.h | 37 +++++++++++++++++++++++++++++++++
lib/rhashtable.c | 5 +----
mm/slub.c | 6 ++++--
mm/zsmalloc.c | 11 +++++++---
18 files changed, 174 insertions(+), 87 deletions(-)
create mode 100644 include/linux/split_lock.h

--
2.30.2