diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c index 9be54de163d..49192bfdb79 100644 --- a/sys/kern/kern_exit.c +++ b/sys/kern/kern_exit.c @@ -765,12 +765,12 @@ proc_reap(struct thread *td, struct proc *p, int *status, int options, /* * Destroy resource accounting information associated with the process. */ - racct_proc_exit(p); #ifdef RACCT - PROC_LOCK(p->p_pptr); - racct_sub(p->p_pptr, RACCT_NPROC, 1); - PROC_UNLOCK(p->p_pptr); + PROC_LOCK(p); + racct_sub(p, RACCT_NPROC, 1); + PROC_UNLOCK(p); #endif + racct_proc_exit(p); /* * Free credentials, arguments, and sigacts. @@ -929,25 +929,13 @@ loop: void proc_reparent(struct proc *child, struct proc *parent) { -#ifdef RACCT - int locked; -#endif sx_assert(&proctree_lock, SX_XLOCKED); PROC_LOCK_ASSERT(child, MA_OWNED); if (child->p_pptr == parent) return; -#ifdef RACCT - locked = PROC_LOCKED(parent); - if (!locked) - PROC_LOCK(parent); - racct_add_force(parent, RACCT_NPROC, 1); - if (!locked) - PROC_UNLOCK(parent); -#endif PROC_LOCK(child->p_pptr); - racct_sub(child->p_pptr, RACCT_NPROC, 1); sigqueue_take(child->p_ksi); PROC_UNLOCK(child->p_pptr); LIST_REMOVE(child, p_sibling); diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c index df2b72590e5..0a27cc02040 100644 --- a/sys/kern/kern_fork.c +++ b/sys/kern/kern_fork.c @@ -806,14 +806,6 @@ fork1(struct thread *td, int flags, int pages, struct proc **procp, return (fork_norfproc(td, flags)); } -#ifdef RACCT - PROC_LOCK(p1); - error = racct_add(p1, RACCT_NPROC, 1); - PROC_UNLOCK(p1); - if (error != 0) - return (EAGAIN); -#endif - #ifdef PROCDESC /* * If required, create a process descriptor in the parent first; we @@ -822,14 +814,8 @@ fork1(struct thread *td, int flags, int pages, struct proc **procp, */ if (flags & RFPROCDESC) { error = falloc(td, &fp_procdesc, procdescp, 0); - if (error != 0) { -#ifdef RACCT - PROC_LOCK(p1); - racct_sub(p1, RACCT_NPROC, 1); - PROC_UNLOCK(p1); -#endif + if (error != 0) return (error); - } } #endif @@ -920,7 +906,8 @@ fork1(struct thread *td, int flags, int pages, struct proc **procp, * After fork, there is exactly one thread running. */ PROC_LOCK(newproc); - error = racct_set(newproc, RACCT_NTHR, 1); + error = racct_add(newproc, RACCT_NPROC, 1); + error += racct_add(newproc, RACCT_NTHR, 1); PROC_UNLOCK(newproc); if (error != 0) { error = EAGAIN; @@ -977,11 +964,6 @@ fail1: fdrop(fp_procdesc, td); #endif pause("fork", hz / 2); -#ifdef RACCT - PROC_LOCK(p1); - racct_sub(p1, RACCT_NPROC, 1); - PROC_UNLOCK(p1); -#endif return (error); }