<div dir="ltr"><div><div>Hi,<br></div>Add another rpc option so that manage cgroup can be set in the service mode. Please review this one. Thanks.<br><br></div>- Hui<br><div><div><div><div><br>From 99a8dee55e7874c7089fa3baf1dd2aedc567b47f Mon Sep 17 00:00:00 2001<br>From: Hui Kang &lt;<a href="mailto:hkang.sunysb@gmail.com">hkang.sunysb@gmail.com</a>&gt;<br>Date: Wed, 5 Aug 2015 16:48:23 +0000<br>Subject: [PATCH] Enable manage cgroup modes in criu service<br><br>Signed-off-by: Hui Kang &lt;<a href="mailto:hkang.sunysb@gmail.com">hkang.sunysb@gmail.com</a>&gt;<br>---<br> cr-service.c       |  4 ++++<br> lib/criu.c         | 11 +++++++++++<br> lib/criu.h         |  2 ++<br> protobuf/rpc.proto | 21 +++++++++++----------<br> 4 files changed, 28 insertions(+), 10 deletions(-)<br><br>diff --git a/cr-service.c b/cr-service.c<br>index 105787e..9bf15ed 100644<br>--- a/cr-service.c<br>+++ b/cr-service.c<br>@@ -400,6 +400,10 @@ static int setup_opts_from_req(int sk, CriuOpts *req)<br>     if (req-&gt;has_manage_cgroups)<br>         opts.manage_cgroups = req-&gt;manage_cgroups ? CG_MODE_SOFT : CG_MODE_IGNORE;<br> <br>+    /* Override the manage_cgroup if mode is set explicitly */<br>+    if (req-&gt;has_manage_cgroups_mode) {<br>+        opts.manage_cgroups = req-&gt;manage_cgroups_mode;<br>+<br>     if (req-&gt;has_auto_ext_mnt)<br>         opts.autodetect_ext_mounts = req-&gt;auto_ext_mnt;<br> <br>diff --git a/lib/criu.c b/lib/criu.c<br>index 3c194a1..90f909f 100644<br>--- a/lib/criu.c<br>+++ b/lib/criu.c<br>@@ -375,6 +375,17 @@ void criu_set_manage_cgroups(bool manage)<br>     criu_local_set_manage_cgroups(global_opts, manage);<br> }<br> <br>+void criu_local_set_manage_cgroups_mode(criu_opts *opts, unsigned int mode)<br>+{<br>+    opts-&gt;rpc-&gt;has_manage_cgroups_mode = true;<br>+    opts-&gt;rpc-&gt;manage_cgroups_mode = mode;<br>+}<br>+<br>+void criu_set_manage_cgroups_mode(unsigned int mode)<br>+{<br>+    criu_local_set_manage_cgroups_mode(global_opts, mode);<br>+}<br>+<br> void criu_local_set_auto_ext_mnt(criu_opts *opts, bool val)<br> {<br>     opts-&gt;rpc-&gt;has_auto_ext_mnt = true;<br>diff --git a/lib/criu.h b/lib/criu.h<br>index 3cb0322..169b9e3 100644<br>--- a/lib/criu.h<br>+++ b/lib/criu.h<br>@@ -67,6 +67,7 @@ void criu_set_log_file(char *log_file);<br> void criu_set_cpu_cap(unsigned int cap);<br> void criu_set_root(char *root);<br> void criu_set_manage_cgroups(bool manage);<br>+void criu_set_manage_cgroups_mode(unsigned int mode);<br> void criu_set_auto_ext_mnt(bool val);<br> void criu_set_ext_sharing(bool val);<br> void criu_set_ext_masters(bool val);<br>@@ -166,6 +167,7 @@ void criu_local_set_log_file(criu_opts *opts, char *log_file);<br> void criu_local_set_cpu_cap(criu_opts *opts, unsigned int cap);<br> void criu_local_set_root(criu_opts *opts, char *root);<br> void criu_local_set_manage_cgroups(criu_opts *opts, bool manage);<br>+void criu_local_set_manage_cgroups_mode(criu_opts *opts, unsigned int mode);<br> void criu_local_set_auto_ext_mnt(criu_opts *opts, bool val);<br> void criu_local_set_ext_sharing(criu_opts *opts, bool val);<br> void criu_local_set_ext_masters(criu_opts *opts, bool val);<br>diff --git a/protobuf/rpc.proto b/protobuf/rpc.proto<br>index 2f4d0c0..779898a 100644<br>--- a/protobuf/rpc.proto<br>+++ b/protobuf/rpc.proto<br>@@ -60,20 +60,21 @@ message criu_opts {<br>     repeated string            exec_cmd    = 22;<br> <br>     repeated ext_mount_map        ext_mnt        = 23;<br>-    optional bool            manage_cgroups    = 24;<br>-    repeated cgroup_root        cg_root        = 25;<br>+    optional bool            manage_cgroups    = 24; /* backward compatibility */<br>+        optional uint32                 manage_cgroups_mode     = 25;<br>+    repeated cgroup_root        cg_root        = 26;<br> <br>-    optional bool            rst_sibling    = 26; /* swrk only */<br>-    repeated inherit_fd        inherit_fd    = 27; /* swrk only */<br>+    optional bool            rst_sibling    = 27; /* swrk only */<br>+    repeated inherit_fd        inherit_fd    = 28; /* swrk only */<br> <br>-    optional bool            auto_ext_mnt    = 28;<br>-    optional bool            ext_sharing     = 29;<br>-    optional bool            ext_masters    = 30;<br>+    optional bool            auto_ext_mnt    = 29;<br>+    optional bool            ext_sharing     = 30;<br>+    optional bool            ext_masters    = 31;<br> <br>-    repeated string            skip_mnt    = 31;<br>-    repeated string            enable_fs    = 32;<br>+    repeated string            skip_mnt    = 32;<br>+    repeated string            enable_fs    = 33;<br> <br>-    repeated unix_sk                unix_sk_ino     = 33;<br>+    repeated unix_sk                unix_sk_ino     = 34;<br> }<br> <br> message criu_dump_resp {<br>-- <br>1.9.1<br><br><br></div></div></div></div></div>