On (25/02/09 01:20), Sergey Senozhatsky wrote: > So I moved lockdep class keys to per-zram device and per-zsmalloc pool > to separate the lockdep chains. Looks like that did the trick. Also need to indicate "try lock": drivers/block/zram/zram_drv.c @@ -86,7 +86,7 @@ static __must_check bool zram_slot_try_lock(struct zram *zram, u32 index) if (!test_and_set_bit_lock(ZRAM_ENTRY_LOCK, lock)) { #ifdef CONFIG_DEBUG_LOCK_ALLOC - mutex_acquire(&zram->table[index].lockdep_map, 0, 0, _RET_IP_); + mutex_acquire(&zram->table[index].lockdep_map, 0, 1, _RET_IP_); #endif return true; } and mm/zsmalloc.c @@ -388,7 +388,7 @@ static __must_check bool zspage_try_write_lock(struct zspage *zspage) preempt_disable(); if (atomic_try_cmpxchg_acquire(lock, &old, ZS_PAGE_WRLOCKED)) { #ifdef CONFIG_DEBUG_LOCK_ALLOC - rwsem_acquire(&zspage->lockdep_map, 0, 0, _RET_IP_); + rwsem_acquire(&zspage->lockdep_map, 0, 1, _RET_IP_); #endif return true; }