Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Lockdep treats down_write_trylock like regular down_write

This causes constructions like

down_write(&mm1->mmap_sem);
if (down_write_trylock(&mm2->mmap_sem)) {
...
up_write(&mm2->mmap_sem);
}
up_write(&mm1->mmap_sem);

generate a lockdep warning about circular locking dependence.

Call rwsem_acquire() with trylock set to 1.

Cc: Ingo Molnar <mingo@elte.hu>
Cc: Arjan van de Ven <arjan@infradead.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Pavel Emelianov and committed by
Linus Torvalds
428e6ce0 644fd4f5

+1 -1
+1 -1
kernel/rwsem.c
··· 60 60 int ret = __down_write_trylock(sem); 61 61 62 62 if (ret == 1) 63 - rwsem_acquire(&sem->dep_map, 0, 0, _RET_IP_); 63 + rwsem_acquire(&sem->dep_map, 0, 1, _RET_IP_); 64 64 return ret; 65 65 } 66 66