]> err.no Git - linux-2.6/blobdiff - kernel/exit.c
[PATCH] libata: implement ata_port_max_devices()
[linux-2.6] / kernel / exit.c
index 601263c0806f3f2580b94db235f18a02503e1ff4..304ef637be6c700e7b5d73172222a0e05e5f96d8 100644 (file)
@@ -137,12 +137,8 @@ void release_task(struct task_struct * p)
 {
        int zap_leader;
        task_t *leader;
-       struct dentry *proc_dentry;
-
 repeat:
        atomic_dec(&p->user->processes);
-       spin_lock(&p->proc_lock);
-       proc_dentry = proc_pid_unhash(p);
        write_lock_irq(&tasklist_lock);
        ptrace_unlink(p);
        BUG_ON(!list_empty(&p->ptrace_list) || !list_empty(&p->ptrace_children));
@@ -171,8 +167,7 @@ repeat:
 
        sched_exit(p);
        write_unlock_irq(&tasklist_lock);
-       spin_unlock(&p->proc_lock);
-       proc_pid_flush(proc_dentry);
+       proc_flush_task(p);
        release_thread(p);
        call_rcu(&p->rcu, delayed_put_task_struct);
 
@@ -894,8 +889,8 @@ fastcall NORET_TYPE void do_exit(long code)
        if (group_dead) {
                hrtimer_cancel(&tsk->signal->real_timer);
                exit_itimers(tsk->signal);
-               acct_process(code);
        }
+       acct_collect(code, group_dead);
        if (unlikely(tsk->robust_list))
                exit_robust_list(tsk);
 #if defined(CONFIG_FUTEX) && defined(CONFIG_COMPAT)
@@ -906,6 +901,8 @@ fastcall NORET_TYPE void do_exit(long code)
                audit_free(tsk);
        exit_mm(tsk);
 
+       if (group_dead)
+               acct_process();
        exit_sem(tsk);
        __exit_files(tsk);
        __exit_fs(tsk);