aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_acct.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_acct.c')
-rw-r--r--sys/kern/kern_acct.c29
1 files changed, 23 insertions, 6 deletions
diff --git a/sys/kern/kern_acct.c b/sys/kern/kern_acct.c
index 05cb3bfb4451..6d2c0e6536c7 100644
--- a/sys/kern/kern_acct.c
+++ b/sys/kern/kern_acct.c
@@ -1,4 +1,11 @@
/*
+ * Copyright (c) UNIX System Laboratories, Inc. All or some portions
+ * of this file are derived from material licensed to the
+ * University of California by American Telephone and Telegraph Co.
+ * or UNIX System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
+ */
+/*
* Copyright (c) 1982, 1986, 1989 Regents of the University of California.
* All rights reserved.
*
@@ -31,7 +38,7 @@
* SUCH DAMAGE.
*
* from: @(#)kern_acct.c 7.18 (Berkeley) 5/11/91
- * $Id: kern_acct.c,v 1.5 1993/10/19 05:46:05 davidg Exp $
+ * $Id: kern_acct.c,v 1.9.2.1 1994/05/04 07:54:32 rgrimes Exp $
*/
#include "param.h"
@@ -57,10 +64,12 @@
*/
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 */
+struct timeval chk; /* frequency to check space for accounting */
struct vnode *acctp = NULL; /* file to which to do accounting */
struct vnode *savacctp = NULL; /* file to which to do accounting when space */
+static void acctwatch(caddr_t, int);
+
/*
* Enable or disable process accounting.
*
@@ -80,6 +89,7 @@ struct sysacct_args {
};
/* ARGSUSED */
+int
sysacct(p, uap, retval)
struct proc *p;
struct sysacct_args *uap;
@@ -89,7 +99,7 @@ sysacct(p, uap, retval)
register struct nameidata *ndp;
struct nameidata nd;
struct vattr attr;
- int rv, acctwatch();
+ int rv;
if (p->p_ucred->cr_uid != 0)
return(EPERM); /* must be root */
@@ -147,8 +157,8 @@ sysacct(p, uap, retval)
acctp = nd.ni_vp;
savacctp = NULL;
- acctwatch(&chk); /* look for full system */
VOP_UNLOCK(acctp);
+ acctwatch((caddr_t)&chk, 0); /* look for full system */
return(0); /* end successfully */
acct_fail:
@@ -161,10 +171,14 @@ acct_fail:
* Periodically check the file system to see if accounting
* should be turned on or off.
*/
-acctwatch(resettime)
- struct timeval *resettime;
+static void
+acctwatch(arg1, arg2)
+ caddr_t arg1;
+ int arg2;
{
+ struct timeval *resettime = (struct timeval *)arg1;
struct statfs sb;
+ int s;
if (savacctp) {
(void)VFS_STATFS(savacctp->v_mount, &sb, (struct proc *)0);
@@ -183,6 +197,8 @@ acctwatch(resettime)
acctp = NULL;
log(LOG_NOTICE, "Accounting suspended\n");
}
+ s = splhigh(); *resettime = time; splx(s);
+ resettime->tv_sec += 15;
timeout(acctwatch, (caddr_t)resettime, hzto(resettime));
}
@@ -193,6 +209,7 @@ acctwatch(resettime)
/* Mark Tinguely (tinguely@plains.NoDak.edu) 8/10/93 */
+void
acct(p)
register struct proc *p;
{