]> err.no Git - linux-2.6/blobdiff - kernel/exit.c
Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[linux-2.6] / kernel / exit.c
index bc0ec674d3f4c4fde1332dacc7e436d63a81c5e5..6c2eeb8f6390c1ae1daeb3b12ecd3aa974b3c599 100644 (file)
@@ -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 @@ repeat:
        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))