svn commit: r297490 - head/sys/kern

Edward Tomasz Napierala trasz at FreeBSD.org
Fri Apr 1 17:17:33 UTC 2016


Author: trasz
Date: Fri Apr  1 17:17:32 2016
New Revision: 297490
URL: https://svnweb.freebsd.org/changeset/base/297490

Log:
  Reduce code duplication.
  
  MFC after:	1 month
  Sponsored by:	The FreeBSD Foundation

Modified:
  head/sys/kern/kern_racct.c

Modified: head/sys/kern/kern_racct.c
==============================================================================
--- head/sys/kern/kern_racct.c	Fri Apr  1 17:05:46 2016	(r297489)
+++ head/sys/kern/kern_racct.c	Fri Apr  1 17:17:32 2016	(r297490)
@@ -534,7 +534,7 @@ racct_adjust_resource(struct racct *racc
 }
 
 static int
-racct_add_locked(struct proc *p, int resource, uint64_t amount)
+racct_add_locked(struct proc *p, int resource, uint64_t amount, int force)
 {
 #ifdef RCTL
 	int error;
@@ -542,18 +542,18 @@ racct_add_locked(struct proc *p, int res
 
 	ASSERT_RACCT_ENABLED();
 
-	SDT_PROBE3(racct, , rusage, add, p, resource, amount);
-
 	/*
 	 * We need proc lock to dereference p->p_ucred.
 	 */
 	PROC_LOCK_ASSERT(p, MA_OWNED);
 
 #ifdef RCTL
-	error = rctl_enforce(p, resource, amount);
-	if (error && RACCT_IS_DENIABLE(resource)) {
-		SDT_PROBE3(racct, , rusage, add__failure, p, resource, amount);
-		return (error);
+	if (!force) {
+		error = rctl_enforce(p, resource, amount);
+		if (error && RACCT_IS_DENIABLE(resource)) {
+			SDT_PROBE3(racct, , rusage, add__failure, p, resource, amount);
+			return (error);
+		}
 	}
 #endif
 	racct_adjust_resource(p->p_racct, resource, amount);
@@ -574,8 +574,10 @@ racct_add(struct proc *p, int resource, 
 	if (!racct_enable)
 		return (0);
 
+	SDT_PROBE3(racct, , rusage, add, p, resource, amount);
+
 	mtx_lock(&racct_lock);
-	error = racct_add_locked(p, resource, amount);
+	error = racct_add_locked(p, resource, amount, 0);
 	mtx_unlock(&racct_lock);
 	return (error);
 }
@@ -625,14 +627,8 @@ racct_add_force(struct proc *p, int reso
 
 	SDT_PROBE3(racct, , rusage, add__force, p, resource, amount);
 
-	/*
-	 * We need proc lock to dereference p->p_ucred.
-	 */
-	PROC_LOCK_ASSERT(p, MA_OWNED);
-
 	mtx_lock(&racct_lock);
-	racct_adjust_resource(p->p_racct, resource, amount);
-	racct_add_cred_locked(p->p_ucred, resource, amount);
+	racct_add_locked(p, resource, amount, 1);
 	mtx_unlock(&racct_lock);
 }
 
@@ -898,8 +894,8 @@ racct_proc_fork(struct proc *parent, str
 			goto out;
 	}
 
-	error = racct_add_locked(child, RACCT_NPROC, 1);
-	error += racct_add_locked(child, RACCT_NTHR, 1);
+	error = racct_add_locked(child, RACCT_NPROC, 1, 0);
+	error += racct_add_locked(child, RACCT_NTHR, 1, 0);
 
 out:
 	mtx_unlock(&racct_lock);


More information about the svn-src-head mailing list