From 78002822cdad554cadfbc570d98e7e01784cc851 Mon Sep 17 00:00:00 2001 From: "Eric W. Biederman" Date: Fri, 31 Mar 2006 02:31:37 -0800 Subject: [PATCH] --- yaml --- r: 24928 b: refs/heads/master c: 8c7904a00b06d2ee51149794b619e07369fcf9d4 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/sched.h | 2 +- trunk/kernel/exit.c | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index fa5e9b2bdaa0..83b96b6de8cc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e4e5d3fc80d26ed26ebe42907b224f08d7eccfbf +refs/heads/master: 8c7904a00b06d2ee51149794b619e07369fcf9d4 diff --git a/trunk/include/linux/sched.h b/trunk/include/linux/sched.h index 95f248ba36c9..7e0ff5dba986 100644 --- a/trunk/include/linux/sched.h +++ b/trunk/include/linux/sched.h @@ -911,7 +911,7 @@ extern void __put_task_struct(struct task_struct *t); static inline void put_task_struct(struct task_struct *t) { if (atomic_dec_and_test(&t->usage)) - call_rcu(&t->rcu, __put_task_struct_cb); + __put_task_struct(t); } /* diff --git a/trunk/kernel/exit.c b/trunk/kernel/exit.c index bc0ec674d3f4..6c2eeb8f6390 100644 --- a/trunk/kernel/exit.c +++ b/trunk/kernel/exit.c @@ -127,6 +127,11 @@ static void __exit_signal(struct task_struct *tsk) } } +static void delayed_put_task_struct(struct rcu_head *rhp) +{ + put_task_struct(container_of(rhp, struct task_struct, rcu)); +} + void release_task(struct task_struct * p) { int zap_leader; @@ -168,7 +173,7 @@ void release_task(struct task_struct * p) spin_unlock(&p->proc_lock); proc_pid_flush(proc_dentry); release_thread(p); - put_task_struct(p); + call_rcu(&p->rcu, delayed_put_task_struct); p = leader; if (unlikely(zap_leader))