From 68f253a79c56dc268f3998a67be7cb7070198e37 Mon Sep 17 00:00:00 2001 From: "Eric W. Biederman" Date: Tue, 18 Apr 2006 22:20:16 -0700 Subject: [PATCH] --- yaml --- r: 25972 b: refs/heads/master c: 5e85d4abe3f43bb5362f384bab0e20ef082ce0b5 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/exec.c | 2 +- trunk/include/linux/sched.h | 3 +-- trunk/kernel/exit.c | 2 +- trunk/kernel/fork.c | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 3d650e29b35e..02d77c45581f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 181ae4005d0a4010802be534d929b38c42b9ac06 +refs/heads/master: 5e85d4abe3f43bb5362f384bab0e20ef082ce0b5 diff --git a/trunk/fs/exec.c b/trunk/fs/exec.c index 4121bb559739..3a79d97ac234 100644 --- a/trunk/fs/exec.c +++ b/trunk/fs/exec.c @@ -712,7 +712,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(¤t->tasks, &init_task.tasks); + list_add_tail_rcu(¤t->tasks, &init_task.tasks); current->group_leader = current; leader->group_leader = current; diff --git a/trunk/include/linux/sched.h b/trunk/include/linux/sched.h index b7d31e2e1729..29b7d4f87d20 100644 --- a/trunk/include/linux/sched.h +++ b/trunk/include/linux/sched.h @@ -1192,8 +1192,7 @@ extern void wait_task_inactive(task_t * p); #define remove_parent(p) list_del_init(&(p)->sibling) #define add_parent(p) list_add_tail(&(p)->sibling,&(p)->parent->children) -#define next_task(p) list_entry((p)->tasks.next, struct task_struct, tasks) -#define prev_task(p) list_entry((p)->tasks.prev, struct task_struct, tasks) +#define next_task(p) list_entry(rcu_dereference((p)->tasks.next), struct task_struct, tasks) #define for_each_process(p) \ for (p = &init_task ; (p = next_task(p)) != &init_task ; ) diff --git a/trunk/kernel/exit.c b/trunk/kernel/exit.c index 1a9787ac6173..f86434d7b3d1 100644 --- a/trunk/kernel/exit.c +++ b/trunk/kernel/exit.c @@ -56,7 +56,7 @@ static void __unhash_process(struct task_struct *p) detach_pid(p, PIDTYPE_PGID); detach_pid(p, PIDTYPE_SID); - list_del_init(&p->tasks); + list_del_rcu(&p->tasks); __get_cpu_var(process_counts)--; } list_del_rcu(&p->thread_group); diff --git a/trunk/kernel/fork.c b/trunk/kernel/fork.c index 54b15f8cda53..34515772611e 100644 --- a/trunk/kernel/fork.c +++ b/trunk/kernel/fork.c @@ -1204,7 +1204,7 @@ static task_t *copy_process(unsigned long clone_flags, attach_pid(p, PIDTYPE_PGID, process_group(p)); attach_pid(p, PIDTYPE_SID, p->signal->session); - list_add_tail(&p->tasks, &init_task.tasks); + list_add_tail_rcu(&p->tasks, &init_task.tasks); __get_cpu_var(process_counts)++; } attach_pid(p, PIDTYPE_PID, p->pid);