[Devel] [PATCH 5/7] Major rewrite of scale() with new macro MUL_BOUND

Igor Podlesny openvz at poige.ru
Mon May 13 01:39:21 PDT 2013


-- 2 new macroses brought in: MIN_OF and MUL_BOUND;
-- Actually NOT needed local variables removed.
---
 include/util.h   |    5 +++++
 src/vzcfgscale.c |   34 ++++++----------------------------
 2 files changed, 11 insertions(+), 28 deletions(-)

diff --git a/include/util.h b/include/util.h
index 0f87e6e..c1175d6 100644
--- a/include/util.h
+++ b/include/util.h
@@ -99,6 +99,11 @@ int vzctl_get_normalized_guid(const char *str, char *buf, int len);
 
 #define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
 
+#define MIN_OF(arg_A, arg_B) ( ( (arg_A) < (arg_B) ) ? (arg_A) : (arg_B) )
+
+#define MUL_BOUND(arg_2mult, arg_mult_by, arg_max2use) \
+		( arg_2mult = MIN_OF( (arg_2mult) * (arg_mult_by), (arg_max2use) ) )
+
 /* Usage: printf("MAC=" MAC2STR_FMT, MAC2STR(dev)); */
 #define MAC2STR_FMT	"%02X:%02X:%02X:%02X:%02X:%02X"
 #define MAC2STR(dev)	\
diff --git a/src/vzcfgscale.c b/src/vzcfgscale.c
index 414aec5..7fc466a 100644
--- a/src/vzcfgscale.c
+++ b/src/vzcfgscale.c
@@ -73,32 +73,16 @@ do { \
 void scale(float ubc_k, float cpu_k, float disk_k, float net_k,
 		struct CParam *param)
 {
-	unsigned long val0, val1;
-
 #define SCALE_UBC(name, k) \
 if (param->name != NULL) { \
-	val0 = param->name[0]; \
-	val1 = param->name[1]; \
-	if (val0 != LONG_MAX) \
-		val0 *= k; \
-	if (val0 > LONG_MAX) \
-		val0 = LONG_MAX; \
-	if (val1 != LONG_MAX) \
-		val1 *= k; \
-	if (val1 > LONG_MAX) \
-		val1 = LONG_MAX; \
-	param->name[0] = val0; \
-	param->name[1] = val1; \
+	MUL_BOUND(param->name[0], k, LONG_MAX); \
+	MUL_BOUND(param->name[1], k, LONG_MAX); \
 } else
 
 #define SCALE_PARAM(name, k) \
 if (param->name != NULL) { \
-	param->name[0] *= k; \
-	param->name[1] *= k; \
-	if (param->name[0] > LONG_MAX) \
-		param->name[0] = LONG_MAX; \
-	if (param->name[1] > LONG_MAX) \
-		param->name[1] = LONG_MAX; \
+	MUL_BOUND(param->name[0], k, LONG_MAX); \
+	MUL_BOUND(param->name[1], k, LONG_MAX); \
 } else
 
 	if (ubc_k)
@@ -126,11 +110,7 @@ if (param->name != NULL) { \
 		SCALE_UBC(numiptent,	ubc_k);
 	}
 	if (cpu_k && param->cpu_units != NULL)
-	{
-		*param->cpu_units *= cpu_k;
-		if (*param->cpu_units > MAXCPUUNITS)
-			 *param->cpu_units = MAXCPUUNITS;
-	}
+		MUL_BOUND(*param->cpu_units, cpu_k, MAXCPUUNITS);
 	if (disk_k)
 	{
 		SCALE_PARAM(quota_block, disk_k);
@@ -144,9 +124,7 @@ if (param->name != NULL) { \
 		{
 			if (p->val2 == NULL)
 				continue;
-			*p->val2 *= net_k;
-			if (*p->val2 > LONG_MAX)
-				*p->val2 = LONG_MAX;
+			MUL_BOUND(*p->val2, net_k, LONG_MAX);
 		}
 	}
 
-- 
1.7.9.5




More information about the Devel mailing list