From: Cyrill Gorcunov <gorcu...@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 <gorcu...@openvz.org>
---
 lib/env_nsops.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

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",
-- 
2.7.4

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to