- register i;
- register struct inode *ip;
- off_t siz;
- register struct acct *ap = &acctbuf;
-
- if (savacctp && savacctp->i_fs->fs_cstotal.cs_nbfree >
- accthigh * savacctp->i_fs->fs_dsize / 100) {
- acctp = savacctp;
- savacctp = NULL;
- printf("Accounting resumed\n");
- }
- if ((ip=acctp)==NULL)
- return;
- if (acctp->i_fs->fs_cstotal.cs_nbfree <
- acctlow * acctp->i_fs->fs_dsize / 100) {
- savacctp = acctp;
- acctp = NULL;
- printf("Accounting suspended\n");
- return;
- }
- ilock(ip);
- for (i=0; i<sizeof(ap->ac_comm); i++)
- ap->ac_comm[i] = u.u_comm[i];
- ap->ac_utime = compress((long)u.u_ru.ru_utime.tv_sec);
- ap->ac_stime = compress((long)u.u_ru.ru_stime.tv_sec);
- ap->ac_etime = compress((long)(time - u.u_start));
- ap->ac_btime = u.u_start;
- ap->ac_uid = u.u_ruid;
- ap->ac_gid = u.u_rgid;
- ap->ac_mem = 0;
- if (i = u.u_ru.ru_utime.tv_sec + u.u_ru.ru_stime.tv_sec)
- ap->ac_mem =
- (u.u_ru.ru_ixrss + u.u_ru.ru_idrss + u.u_ru.ru_isrss) / i;
- ap->ac_io = compress((long)(u.u_ru.ru_inblock + u.u_ru.ru_oublock));
- if (u.u_ttyp)
- ap->ac_tty = u.u_ttyd;
- else
- ap->ac_tty = NODEV;
- ap->ac_flag = u.u_acflag;
- siz = ip->i_size;
- u.u_error =
- rdwri(UIO_WRITE, ip, (caddr_t)ap, sizeof (acctbuf), siz,
- 1, (int *)0);
- if (u.u_error)
- ip->i_size = siz;
- iunlock(ip);