aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/exit.c
diff options
context:
space:
mode:
authorOleg Nesterov <oleg@tv-sign.ru>2006-03-28 19:11:20 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-28 21:36:43 -0500
commit5876700cd399112ecfa70df36203c8c6660d84f8 (patch)
tree3060724c6682ee7452bcb7b3c99eded75cd59ea7 /kernel/exit.c
parent35f5cad8c4bab94ecc5acdc4055df5ea12dc76f8 (diff)
[PATCH] do __unhash_process() under ->siglock
This patch moves __unhash_process() call from realease_task() to __exit_signal(), so __detach_pid() is called with ->siglock held. This means we don't need tasklist_lock to iterate over thread group anymore: copy_process() was already changed to do attach_pid() under ->siglock. Eric's "pidhash-kill-switch_exec_pids.patch" from -mm changed de_thread() so it doesn't touch PIDTYPE_TGID. NOTE: de_thread() still needs some attention. It still changes task->pid lockless. Taking ->sighand.siglock here allows to do more tasklist_lock removals. Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/exit.c')
-rw-r--r--kernel/exit.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/exit.c b/kernel/exit.c
index 6b2e4cf3e140..44d6c6e3896d 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -112,6 +112,8 @@ static void __exit_signal(struct task_struct *tsk)
112 sig = NULL; /* Marker for below. */ 112 sig = NULL; /* Marker for below. */
113 } 113 }
114 114
115 __unhash_process(tsk);
116
115 tsk->signal = NULL; 117 tsk->signal = NULL;
116 cleanup_sighand(tsk); 118 cleanup_sighand(tsk);
117 spin_unlock(&sighand->siglock); 119 spin_unlock(&sighand->siglock);
@@ -140,8 +142,6 @@ repeat:
140 BUG_ON(!list_empty(&p->ptrace_list) || !list_empty(&p->ptrace_children)); 142 BUG_ON(!list_empty(&p->ptrace_list) || !list_empty(&p->ptrace_children));
141 __exit_signal(p); 143 __exit_signal(p);
142 144
143 __unhash_process(p);
144
145 /* 145 /*
146 * If we are the last non-leader member of the thread 146 * If we are the last non-leader member of the thread
147 * group, and the leader is zombie, then notify the 147 * group, and the leader is zombie, then notify the