Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ceb8693 authored by Oleg Nesterov's avatar Oleg Nesterov Committed by Linus Torvalds
Browse files

[PATCH] de_thread: fix lockless do_each_thread



We should keep the value of old_leader->tasks.next in de_thread, otherwise
we can't do for_each_process/do_each_thread without tasklist_lock held.

Signed-off-by: default avatarOleg Nesterov <oleg@tv-sign.ru>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 42c3e03e
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -707,7 +707,7 @@ static int de_thread(struct task_struct *tsk)
		attach_pid(current, PIDTYPE_PID,  current->pid);
		attach_pid(current, PIDTYPE_PGID, current->signal->pgrp);
		attach_pid(current, PIDTYPE_SID,  current->signal->session);
		list_add_tail_rcu(&current->tasks, &init_task.tasks);
		list_replace_rcu(&leader->tasks, &current->tasks);

		current->group_leader = current;
		leader->group_leader = current;
@@ -715,7 +715,6 @@ static int de_thread(struct task_struct *tsk)
		/* Reduce leader to a thread */
		detach_pid(leader, PIDTYPE_PGID);
		detach_pid(leader, PIDTYPE_SID);
		list_del_init(&leader->tasks);

		current->exit_signal = SIGCHLD;