[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.
diff --git a/kernel/exit.c b/kernel/exit.c
index 601263c..819d82c 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -894,7 +894,7 @@
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 @@
audit_free(tsk);
exit_mm(tsk);
+ if (group_dead)
+ acct_process(code);
exit_sem(tsk);
__exit_files(tsk);
__exit_fs(tsk);