[PATCH] Lockdep treats down_write_trylock like regular down_write

From: Pavel Emelianov
Date: Mon Apr 09 2007 - 05:52:24 EST


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.
--- ./kernel/rwsem.c.pbonrem 2007-03-06 19:09:50.000000000 +0300
+++ ./kernel/rwsem.c 2007-04-06 14:02:18.000000000 +0400
@@ -60,7 +60,7 @@ int down_write_trylock(struct rw_semapho
int ret = __down_write_trylock(sem);

if (ret == 1)
- rwsem_acquire(&sem->dep_map, 0, 0, _RET_IP_);
+ rwsem_acquire(&sem->dep_map, 0, 1, _RET_IP_);
return ret;
}