aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/exit.c
diff options
context:
space:
mode:
authorKaiGai Kohei <kaigai@ak.jp.nec.com>2006-06-25 08:49:24 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-25 13:01:25 -0400
commit0e4648141af02331f21aabcd34940c70f09a2d04 (patch)
tree3e4dea992a8e3f3194be04a0fd3e14c24a313ee7 /kernel/exit.c
parent6bc392741d661eb84be503d1fdf14b6746615e4c (diff)
[PATCH] pacct: add pacct_struct to fix some pacct bugs.
The pacct facility need an i/o operation when an accounting record is generated. There is a possibility to wake OOM killer up. If OOM killer is activated, it kills some processes to make them release process memory regions. But acct_process() is called in the killed processes context before calling exit_mm(), so those processes cannot release own memory. In the results, any processes stop in this point and it finally cause a system stall.
Diffstat (limited to 'kernel/exit.c')
-rw-r--r--kernel/exit.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/exit.c b/kernel/exit.c
index 601263c0806f..819d82c2efba 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -894,7 +894,7 @@ fastcall NORET_TYPE void do_exit(long code)
894 if (group_dead) { 894 if (group_dead) {
895 hrtimer_cancel(&tsk->signal->real_timer); 895 hrtimer_cancel(&tsk->signal->real_timer);
896 exit_itimers(tsk->signal); 896 exit_itimers(tsk->signal);
897 acct_process(code); 897 acct_collect();
898 } 898 }
899 if (unlikely(tsk->robust_list)) 899 if (unlikely(tsk->robust_list))
900 exit_robust_list(tsk); 900 exit_robust_list(tsk);
@@ -906,6 +906,8 @@ fastcall NORET_TYPE void do_exit(long code)
906 audit_free(tsk); 906 audit_free(tsk);
907 exit_mm(tsk); 907 exit_mm(tsk);
908 908
909 if (group_dead)
910 acct_process(code);
909 exit_sem(tsk); 911 exit_sem(tsk);
910 __exit_files(tsk); 912 __exit_files(tsk);
911 __exit_fs(tsk); 913 __exit_fs(tsk);