In order for LXC to be the parent of the restored process, CRIU needs to
restore init as its sibling, not as its child. This was previously accomplished
essentially via luck :). CRIU now has a --restore-sibling option which forces
this behavior that LXC expects. See more discussion in this thread:
http://lists.openvz.org/pipermail/criu/2014-September/thread.html#16330

Signed-off-by: Tycho Andersen <tycho.ander...@canonical.com>
---
 src/lxc/lxccontainer.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
index ff5167a..8c75267 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -3546,11 +3546,11 @@ static int read_criu_file(const char *directory, const 
char *file, int netnr, ch
 static void exec_criu(struct criu_opts *opts)
 {
        char **argv, log[PATH_MAX];
-       int static_args = 14, argc = 0, i, ret;
+       int static_args = 15, argc = 0, i, ret;
 
        /* The command line always looks like:
         * criu $(action) --tcp-established --file-locks --link-remap 
--force-irmap \
-        * --manage-cgroups action-script foo.sh -D $(directory) \
+        * --manage-cgroups --restore-sibling action-script foo.sh -D 
$(directory) \
         * -o $(directory)/$(action).log
         * +1 for final NULL */
 
@@ -3601,6 +3601,7 @@ static void exec_criu(struct criu_opts *opts)
        DECLARE_ARG("--file-locks");
        DECLARE_ARG("--link-remap");
        DECLARE_ARG("--force-irmap");
+       DECLARE_ARG("--restore-sibling");
        DECLARE_ARG("--manage-cgroups");
        DECLARE_ARG("--action-script");
        DECLARE_ARG(LIBEXECDIR "/lxc/lxc-restore-net");
-- 
1.9.1

_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to