diff options
author | Ingo Molnar <mingo@elte.hu> | 2006-07-03 03:24:51 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-07-03 18:27:04 -0400 |
commit | 6c9076ec9cd448f43bbda871352a7067f456ee26 (patch) | |
tree | 8691366aa511f20146eb9cfe942e0d94c4136e1a /kernel/lockdep.c | |
parent | fbb9ce9530fd9b66096d5187fa6a115d16d9746c (diff) |
[PATCH] lockdep: allow read_lock() recursion of same class
From: Ingo Molnar <mingo@elte.hu>
lockdep so far only allowed read-recursion for the same lock instance.
This is enough in the overwhelming majority of cases, but a hostap case
triggered and reported by Miles Lane relies on same-class
different-instance recursion. So we relax the restriction on read-lock
recursion.
(This change does not allow rwsem read-recursion, which is still
forbidden.)
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/lockdep.c')
-rw-r--r-- | kernel/lockdep.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/kernel/lockdep.c b/kernel/lockdep.c index dd0580910a97..f32ca78c198d 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c | |||
@@ -843,10 +843,9 @@ check_deadlock(struct task_struct *curr, struct held_lock *next, | |||
843 | continue; | 843 | continue; |
844 | /* | 844 | /* |
845 | * Allow read-after-read recursion of the same | 845 | * Allow read-after-read recursion of the same |
846 | * lock instance (i.e. read_lock(lock)+read_lock(lock)): | 846 | * lock class (i.e. read_lock(lock)+read_lock(lock)): |
847 | */ | 847 | */ |
848 | if ((read == 2) && prev->read && | 848 | if ((read == 2) && prev->read) |
849 | (prev->instance == next_instance)) | ||
850 | return 2; | 849 | return 2; |
851 | return print_deadlock_bug(curr, prev, next); | 850 | return print_deadlock_bug(curr, prev, next); |
852 | } | 851 | } |