diff options
author | KaiGai Kohei <kaigai@ak.jp.nec.com> | 2006-06-25 05:49:24 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-25 10:01:25 -0700 |
commit | 0e4648141af02331f21aabcd34940c70f09a2d04 (patch) | |
tree | 3e4dea992a8e3f3194be04a0fd3e14c24a313ee7 /kernel/exit.c | |
parent | 6bc392741d661eb84be503d1fdf14b6746615e4c (diff) | |
download | linux-stable-0e4648141af02331f21aabcd34940c70f09a2d04.tar.gz linux-stable-0e4648141af02331f21aabcd34940c70f09a2d04.tar.bz2 linux-stable-0e4648141af02331f21aabcd34940c70f09a2d04.zip |
[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.c | 4 |
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) if (group_dead) { hrtimer_cancel(&tsk->signal->real_timer); exit_itimers(tsk->signal); - acct_process(code); + acct_collect(); } if (unlikely(tsk->robust_list)) exit_robust_list(tsk); @@ -906,6 +906,8 @@ fastcall NORET_TYPE void do_exit(long code) audit_free(tsk); exit_mm(tsk); + if (group_dead) + acct_process(code); exit_sem(tsk); __exit_files(tsk); __exit_fs(tsk); |