From: "Paul E. McKenney" Some fixes to RCU usage for sighand_struct, adding a couple of needed rcu_assign_pointer() calls. Signed-off-by: "Paul E. McKenney" Signed-off-by: Andrew Morton --- fs/exec.c | 2 +- kernel/fork.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff -puN fs/exec.c~rcu-signal-handling-fixes fs/exec.c --- devel/fs/exec.c~rcu-signal-handling-fixes 2005-10-31 22:35:06.000000000 -0800 +++ devel-akpm/fs/exec.c 2005-10-31 22:35:07.000000000 -0800 @@ -766,7 +766,7 @@ no_thread_group: spin_lock(&oldsighand->siglock); spin_lock(&newsighand->siglock); - current->sighand = newsighand; + rcu_assign_pointer(current->sighand, newsighand); recalc_sigpending(); spin_unlock(&newsighand->siglock); diff -puN kernel/fork.c~rcu-signal-handling-fixes kernel/fork.c --- devel/kernel/fork.c~rcu-signal-handling-fixes 2005-10-31 22:35:06.000000000 -0800 +++ devel-akpm/kernel/fork.c 2005-10-31 22:35:07.000000000 -0800 @@ -769,7 +769,7 @@ static inline int copy_sighand(unsigned return 0; } sig = kmem_cache_alloc(sighand_cachep, GFP_KERNEL); - tsk->sighand = sig; + rcu_assign_pointer(tsk->sighand, sig); if (!sig) return -ENOMEM; spin_lock_init(&sig->siglock); _