From: Ingo Molnar <mingo(a)elte.hu>
Simplify audit_free()'s locking: no need to lock a task that we are tearing
down. [the extra locking also caused false positives in the lock
validator]
Signed-off-by: Ingo Molnar <mingo(a)elte.hu>
Cc: David Woodhouse <dwmw2(a)infradead.org>
Signed-off-by: Andrew Morton <akpm(a)osdl.org>
---
kernel/auditsc.c | 10 +++++++---
1 files changed, 7 insertions(+), 3 deletions(-)
diff -puN kernel/auditsc.c~simplify-audit_free-locking kernel/auditsc.c
--- devel/kernel/auditsc.c~simplify-audit_free-locking 2006-02-21 19:11:13.000000000
-0800
+++ devel-akpm/kernel/auditsc.c 2006-02-21 19:11:13.000000000 -0800
@@ -686,10 +686,14 @@ void audit_free(struct task_struct *tsk)
{
struct audit_context *context;
- task_lock(tsk);
+ /*
+ * No need to lock the task - when we execute audit_free()
+ * then the task has no external references anymore, and
+ * we are tearing it down. (The locking also confuses
+ * DEBUG_LOCKDEP - this freeing may occur in softirq
+ * contexts as well, via RCU.)
+ */
context = audit_get_context(tsk, 0, 0);
- task_unlock(tsk);
-
if (likely(!context))
return;
_
Show replies by date