sleep doesn't need spl0 (idle does it)
[unix-history] / usr / src / sys / kern / kern_acct.c
index 18d98e9..962f41f 100644 (file)
@@ -4,7 +4,7 @@
  *
  * %sccs.include.proprietary.c%
  *
  *
  * %sccs.include.proprietary.c%
  *
- *     @(#)kern_acct.c 7.18 (Berkeley) %G%
+ *     @(#)kern_acct.c 7.20 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -69,26 +69,27 @@ sysacct(p, uap, retval)
        if (uap->fname == NULL) {
                if (vp = acctp) {
                        acctp = NULL;
        if (uap->fname == NULL) {
                if (vp = acctp) {
                        acctp = NULL;
-                       vrele(vp);
+                       error = vn_close(vp, FWRITE, p->p_ucred, p);
                        untimeout(acctwatch, (caddr_t)&chk);
                }
                        untimeout(acctwatch, (caddr_t)&chk);
                }
-               return (0);
+               return (error);
        }
        nd.ni_segflg = UIO_USERSPACE;
        nd.ni_dirp = uap->fname;
        if (error = vn_open(&nd, p, FWRITE, 0644))
                return (error);
        vp = nd.ni_vp;
        }
        nd.ni_segflg = UIO_USERSPACE;
        nd.ni_dirp = uap->fname;
        if (error = vn_open(&nd, p, FWRITE, 0644))
                return (error);
        vp = nd.ni_vp;
+       VOP_UNLOCK(vp);
        if (vp->v_type != VREG) {
        if (vp->v_type != VREG) {
-               vrele(vp);
+               (void) vn_close(vp, FWRITE, p->p_ucred, p);
                return (EACCES);
        }
        oacctp = acctp;
        acctp = vp;
        if (oacctp)
                return (EACCES);
        }
        oacctp = acctp;
        acctp = vp;
        if (oacctp)
-               vrele(oacctp);
+               error = vn_close(oacctp, FWRITE, p->p_ucred, p);
        acctwatch(&chk);
        acctwatch(&chk);
-       return (0);
+       return (error);
 }
 
 /*
 }
 
 /*