[PATCH 2/6] c/r: nit to avoid rcu lockdep complaint in restore_obj_sighand() [message #41573 is a reply to message #41559] |
Mon, 07 February 2011 17:18   |
Oren Laadan
Messages: 71 Registered: August 2007
|
Member |
|
|
Signed-off-by: Oren Laadan <orenl@cs.columbia.edu>
---
kernel/signal.c | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/kernel/signal.c b/kernel/signal.c
index dca40be..3842f5d 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -2871,7 +2871,7 @@ static void *restore_sighand(struct ckpt_ctx *ctx)
int restore_obj_sighand(struct ckpt_ctx *ctx, int sighand_objref)
{
struct sighand_struct *sighand;
- struct sighand_struct *old_sighand;
+ struct sighand_struct *old_sighand = NULL;
sighand = ckpt_obj_fetch(ctx, sighand_objref, CKPT_OBJ_SIGHAND);
if (IS_ERR(sighand))
@@ -2884,11 +2884,14 @@ int restore_obj_sighand(struct ckpt_ctx *ctx, int sighand_objref)
/* manipulate tsk->sighand with tasklist lock write-held */
write_lock_irq(&tasklist_lock);
- old_sighand = rcu_dereference(current->sighand);
+ old_sighand = rcu_dereference_check(current->sighand,
+ rcu_read_lock_held() ||
+ lockdep_is_held(&tasklist_lock));
spin_lock(&old_sighand->siglock);
rcu_assign_pointer(current->sighand, sighand);
spin_unlock(&old_sighand->siglock);
write_unlock_irq(&tasklist_lock);
+
__cleanup_sighand(old_sighand);
return 0;
--
1.7.1
_______________________________________________
Containers mailing list
Containers@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containe rs
|
|
|