From owner-svn-src-all@FreeBSD.ORG Mon Oct 3 17:40:55 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D2C1E106566B; Mon, 3 Oct 2011 17:40:55 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A89938FC08; Mon, 3 Oct 2011 17:40:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id p93HetUj021113; Mon, 3 Oct 2011 17:40:55 GMT (envelope-from trasz@svn.freebsd.org) Received: (from trasz@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id p93Hetcd021110; Mon, 3 Oct 2011 17:40:55 GMT (envelope-from trasz@svn.freebsd.org) Message-Id: <201110031740.p93Hetcd021110@svn.freebsd.org> From: Edward Tomasz Napierala Date: Mon, 3 Oct 2011 17:40:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r225944 - head/sys/kern X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Oct 2011 17:40:55 -0000 Author: trasz Date: Mon Oct 3 17:40:55 2011 New Revision: 225944 URL: http://svn.freebsd.org/changeset/base/225944 Log: Move some code inside the racct_proc_fork(); it spares a few lock operations and it's more logical this way. MFC after: 3 days Modified: head/sys/kern/kern_fork.c head/sys/kern/kern_racct.c Modified: head/sys/kern/kern_fork.c ============================================================================== --- head/sys/kern/kern_fork.c Mon Oct 3 17:01:31 2011 (r225943) +++ head/sys/kern/kern_fork.c Mon Oct 3 17:40:55 2011 (r225944) @@ -879,17 +879,6 @@ fork1(struct thread *td, int flags, int goto fail1; } -#ifdef RACCT - PROC_LOCK(newproc); - error = racct_add(newproc, RACCT_NPROC, 1); - error += racct_add(newproc, RACCT_NTHR, 1); - PROC_UNLOCK(newproc); - if (error != 0) { - error = EAGAIN; - goto fail1; - } -#endif - #ifdef MAC mac_proc_init(newproc); #endif Modified: head/sys/kern/kern_racct.c ============================================================================== --- head/sys/kern/kern_racct.c Mon Oct 3 17:01:31 2011 (r225943) +++ head/sys/kern/kern_racct.c Mon Oct 3 17:40:55 2011 (r225944) @@ -261,12 +261,8 @@ racct_alloc_resource(struct racct *racct } } -/* - * Increase allocation of 'resource' by 'amount' for process 'p'. - * Return 0 if it's below limits, or errno, if it's not. - */ -int -racct_add(struct proc *p, int resource, uint64_t amount) +static int +racct_add_locked(struct proc *p, int resource, uint64_t amount) { #ifdef RCTL int error; @@ -282,23 +278,35 @@ racct_add(struct proc *p, int resource, */ PROC_LOCK_ASSERT(p, MA_OWNED); - mtx_lock(&racct_lock); #ifdef RCTL error = rctl_enforce(p, resource, amount); if (error && RACCT_IS_DENIABLE(resource)) { SDT_PROBE(racct, kernel, rusage, add_failure, p, resource, amount, 0, 0); - mtx_unlock(&racct_lock); return (error); } #endif racct_alloc_resource(p->p_racct, resource, amount); racct_add_cred_locked(p->p_ucred, resource, amount); - mtx_unlock(&racct_lock); return (0); } +/* + * Increase allocation of 'resource' by 'amount' for process 'p'. + * Return 0 if it's below limits, or errno, if it's not. + */ +int +racct_add(struct proc *p, int resource, uint64_t amount) +{ + int error; + + mtx_lock(&racct_lock); + error = racct_add_locked(p, resource, amount); + mtx_unlock(&racct_lock); + return (error); +} + static void racct_add_cred_locked(struct ucred *cred, int resource, uint64_t amount) { @@ -575,8 +583,13 @@ racct_proc_fork(struct proc *parent, str #ifdef RCTL error = rctl_proc_fork(parent, child); + if (error != 0) + goto out; #endif + error = racct_add_locked(child, RACCT_NPROC, 1); + error += racct_add_locked(child, RACCT_NTHR, 1); + out: mtx_unlock(&racct_lock); PROC_UNLOCK(child);