[Devel,libvzctl,5/6] env_nsops: ns_set_memory_param -- Allow to select which param to set

Submitted by Cyrill Gorcunov on Feb. 7, 2017, 9:05 p.m.

Details

Message ID 1486501541-20795-6-git-send-email-gorcunov@virtuozzo.com
State New
Series "Rework memory limits restore"
Headers show

Commit Message

Cyrill Gorcunov Feb. 7, 2017, 9:05 p.m.
From: Cyrill Gorcunov <gorcunov@openvz.org>

In case of restore procedure we will be restoring
memory limits in several steps: limiting ram first
and limiting swap on later stage. Thus provide the
mask to trigger the switch.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
---
 lib/env_nsops.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

Patch hide | download patch | download mbox

diff --git a/lib/env_nsops.c b/lib/env_nsops.c
index 4650506..a5f1ec4 100644
--- a/lib/env_nsops.c
+++ b/lib/env_nsops.c
@@ -278,7 +278,13 @@  static int ns_set_ub(struct vzctl_env_handle *h,
 
 #define PAGE_COUNTER_MAX ((unsigned long)LONG_MAX)
 
-static int ns_set_memory_param(struct vzctl_env_handle *h, struct vzctl_ub_param *ub)
+#define MPARAM_PHYSPAGES        1
+#define MPARAM_SWAPPAGES        2
+#define MPARAM_ALL              (MPARAM_PHYSPAGES | MPARAM_SWAPPAGES)
+
+static int ns_set_memory_param(struct vzctl_env_handle *h,
+			       struct vzctl_ub_param *ub,
+			       int mask)
 {
 	int ret = 0;
 	int pagesize = get_pagesize();
@@ -300,7 +306,7 @@  static int ns_set_memory_param(struct vzctl_env_handle *h, struct vzctl_ub_param
 	x += ub->physpages ? (float)pagesize * ub->physpages->l : cur_mem;
 	new_ms = x > PAGE_COUNTER_MAX ? PAGE_COUNTER_MAX : (unsigned long) x;
 
-	if (ub->physpages) {
+	if (ub->physpages && (mask & MPARAM_PHYSPAGES)) {
 		x = (float)pagesize * ub->physpages->l;
 		new_mem = x > PAGE_COUNTER_MAX ? PAGE_COUNTER_MAX : (unsigned long) x;
 
@@ -321,7 +327,8 @@  static int ns_set_memory_param(struct vzctl_env_handle *h, struct vzctl_ub_param
 	
 	}
 
-	return cg_env_set_memory(h->ctid, CG_SWAP_LIMIT, new_ms);
+	return (mask & MPARAM_SWAPPAGES) ?
+		cg_env_set_memory(h->ctid, CG_SWAP_LIMIT, new_ms) : 0;
 }
 
 static int ns_apply_res_param(struct vzctl_env_handle *h,
@@ -346,7 +353,7 @@  static int ns_apply_res_param(struct vzctl_env_handle *h,
 			 * unlimited memory resources until 
 			 * configuration was activated by vcmmd
 			 */
-			ret = ns_set_memory_param(h, ub);
+			ret = ns_set_memory_param(h, ub, MPARAM_ALL);
 			if (ret)
 				goto err;
 			ret = vcmm_register(h, env);
@@ -357,7 +364,7 @@  static int ns_apply_res_param(struct vzctl_env_handle *h,
 			env->res->memguar = NULL;
 		}
 	} else
-		ret = ns_set_memory_param(h, ub);
+		ret = ns_set_memory_param(h, ub, MPARAM_ALL);
 
 	if (env->res->ub->pagecache_isolation) {
 		ret = cg_env_set_memory(EID(h), "memory.disable_cleancache",