diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/acct.c | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/kernel/acct.c b/kernel/acct.c index e63095525ac2..028e310bd15f 100644 --- a/kernel/acct.c +++ b/kernel/acct.c @@ -394,17 +394,26 @@ static void do_acct_process(long exitcode, struct file *file) /* * acct_process - now just a wrapper around do_acct_process */ -int acct_process(long exitcode) +void acct_process(long exitcode) { struct file *file = NULL; + + /* + * accelerate the common fastpath: + */ + if (!acct_globals.file) + return; + spin_lock(&acct_globals.lock); - if (acct_globals.file) { - file = acct_globals.file; - get_file(file); - spin_unlock(&acct_globals.lock); - do_acct_process(exitcode, file); - fput(file); - } else - spin_unlock(&acct_globals.lock); - return 0; + file = acct_globals.file; + if (!file) + goto out_unlock; + + get_file(file); + spin_unlock(&acct_globals.lock); + do_acct_process(exitcode, file); + fput(file); + +out_unlock: + spin_unlock(&acct_globals.lock); } |
