[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.
This commit is contained in:
KaiGai Kohei 2006-06-25 05:49:24 -07:00 committed by Linus Torvalds
parent 6bc392741d
commit 0e4648141a
5 changed files with 51 additions and 16 deletions

View file

@ -358,6 +358,10 @@ struct sighand_struct {
spinlock_t siglock;
};
struct pacct_struct {
unsigned long ac_mem;
};
/*
* NOTE! "signal_struct" does not have it's own
* locking, because a shared signal_struct always
@ -449,6 +453,9 @@ struct signal_struct {
struct key *session_keyring; /* keyring inherited over fork */
struct key *process_keyring; /* keyring private to this process */
#endif
#ifdef CONFIG_BSD_PROCESS_ACCT
struct pacct_struct pacct; /* per-process accounting information */
#endif
};
/* Context switch must be unlocked if interrupts are to be enabled */