/* * Copyright (c) 1982, 1986, 1989 Regents of the University of California. * All rights reserved. * * %sccs.include.redist.c% * * from: @(#)kern_acct.c 7.18 (Berkeley) 5/11/91 */ #include "param.h" #include "systm.h" #include "namei.h" #include "resourcevar.h" #include "proc.h" #include "ioctl.h" #include "termios.h" #include "tty.h" #include "vnode.h" #include "mount.h" #include "kernel.h" #include "file.h" #include "acct.h" #include "syslog.h" /* * Values associated with enabling and disabling accounting */ int acctsuspend = 2; /* stop accounting when < 2% free space left */ int acctresume = 4; /* resume when free space risen to > 4% */ struct timeval chk = { 15, 0 };/* frequency to check space for accounting */ /* * Enable or disable process accounting. * * If a non-null filename is given, that file is used to store accounting * records on process exit. If a null filename is given process accounting * is suspended. If accounting is enabled, the system checks the amount * of freespace on the filesystem at timeval intervals. If the amount of * freespace is below acctsuspend percent, accounting is suspended. If * accounting has been suspended, and freespace rises above acctresume, * accounting is resumed. */ /* ARGSUSED */ sysacct(p, uap, retval) struct proc *p; struct args { char *fname; } *uap; int *retval; { /* * Body deleted. */ return (ENOSYS); } /* * Periodically check the file system to see if accounting * should be turned on or off. */ acctwatch(resettime) struct timeval *resettime; { struct statfs sb; if (savacctp) { (void)VFS_STATFS(savacctp->v_mount, &sb, (struct proc *)0); if (sb.f_bavail > acctresume * sb.f_blocks / 100) { acctp = savacctp; savacctp = NULL; log(LOG_NOTICE, "Accounting resumed\n"); return; } } if (acctp == NULL) return; (void)VFS_STATFS(acctp->v_mount, &sb, (struct proc *)0); if (sb.f_bavail <= acctsuspend * sb.f_blocks / 100) { savacctp = acctp; acctp = NULL; log(LOG_NOTICE, "Accounting suspended\n"); } timeout(acctwatch, (caddr_t)resettime, hzto(resettime)); } /* * This routine calculates an accounting record for a process and, * if accounting is enabled, writes it to the accounting file. */ acct(p) register struct proc *p; { /* * Body deleted. */ return; }