mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-05 02:19:51 +00:00
[PATCH] largefile support for accounting
There is a problem in the accounting subsystem in the kernel can not correctly handle files larger than 2GB. The output file containing the process accounting data can grow very large if the system is large enough and active enough. If the 2GB limit is reached, then the system simply stops storing process accounting data. Another annoying problem is that once the system reaches this 2GB limit, then every process which exits will receive a signal, SIGXFSZ. This signal is generated because an attempt was made to write beyond the limit for the file descriptor. This signal makes it look like every process has exited due to a signal, when in fact, they have not. The solution is to add the O_LARGEFILE flag to the list of flags used to open the accounting file. The rest of the accounting support is already largefile safe. The changes were tested by constructing a large file (just short of 2GB), enabling accounting, and then running enough commands to cause the accounting data generated to increase the size of the file to 2GB. Without the changes, the file grows to 2GB and the last command run in the test script appears to exit due a signal when it has not. With the changes, things work as expected and quietly. There are some user level changes required so that it can deal with largefiles, but those are being handled separately. Signed-off-by: Peter Staubach <staubach@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
439c430e3d
commit
6c9c0b52b8
1 changed files with 1 additions and 1 deletions
|
@ -220,7 +220,7 @@ asmlinkage long sys_acct(const char __user *name)
|
||||||
return (PTR_ERR(tmp));
|
return (PTR_ERR(tmp));
|
||||||
}
|
}
|
||||||
/* Difference from BSD - they don't do O_APPEND */
|
/* Difference from BSD - they don't do O_APPEND */
|
||||||
file = filp_open(tmp, O_WRONLY|O_APPEND, 0);
|
file = filp_open(tmp, O_WRONLY|O_APPEND|O_LARGEFILE, 0);
|
||||||
putname(tmp);
|
putname(tmp);
|
||||||
if (IS_ERR(file)) {
|
if (IS_ERR(file)) {
|
||||||
return (PTR_ERR(file));
|
return (PTR_ERR(file));
|
||||||
|
|
Loading…
Reference in a new issue