svn commit: r243070 - head/sys/kern

Edward Tomasz Napierala trasz at FreeBSD.org
Thu Nov 15 14:11:35 UTC 2012


Author: trasz
Date: Thu Nov 15 14:11:34 2012
New Revision: 243070
URL: http://svnweb.freebsd.org/changeset/base/243070

Log:
  Fix kassert that's not really valid for %CPU accounting.  The problem
  here is race between decaying the resource usage in containers, and updating
  per-process usage; basically, the former may cause per-container usage
  to get smaller than per-process usage.
  
  Submitted by:	Rudo Tomori

Modified:
  head/sys/kern/kern_racct.c

Modified: head/sys/kern/kern_racct.c
==============================================================================
--- head/sys/kern/kern_racct.c	Thu Nov 15 14:10:51 2012	(r243069)
+++ head/sys/kern/kern_racct.c	Thu Nov 15 14:11:34 2012	(r243070)
@@ -403,7 +403,7 @@ racct_sub_racct(struct racct *dest, cons
 	 * Update resource usage in dest.
 	 */
 	for (i = 0; i <= RACCT_MAX; i++) {
-		if (!RACCT_IS_SLOPPY(i)) {
+		if (!RACCT_IS_SLOPPY(i) && !RACCT_IS_DECAYING(i)) {
 			KASSERT(dest->r_resources[i] >= 0,
 			    ("racct propagation meltdown: dest < 0"));
 			KASSERT(src->r_resources[i] >= 0,
@@ -414,7 +414,8 @@ racct_sub_racct(struct racct *dest, cons
 		if (RACCT_CAN_DROP(i)) {
 			dest->r_resources[i] -= src->r_resources[i];
 			if (dest->r_resources[i] < 0) {
-				KASSERT(RACCT_IS_SLOPPY(i),
+				KASSERT(RACCT_IS_SLOPPY(i) ||
+				    RACCT_IS_DECAYING(i),
 				    ("racct_sub_racct: usage < 0"));
 				dest->r_resources[i] = 0;
 			}


More information about the svn-src-all mailing list