Actually, right now this function will restart only one process.
Function to read head of dump file is introduced.

Signed-off-by: Andrey Mirkin <[EMAIL PROTECTED]>
---
 cpt/Makefile  |    2 +-
 cpt/cpt.h     |    1 +
 cpt/restart.c |   87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 cpt/sys.c     |    2 +-
 4 files changed, 90 insertions(+), 2 deletions(-)
 create mode 100644 cpt/restart.c

diff --git a/cpt/Makefile b/cpt/Makefile
index bbb0e37..47c7852 100644
--- a/cpt/Makefile
+++ b/cpt/Makefile
@@ -2,4 +2,4 @@ obj-y += sys_core.o
 
 obj-$(CONFIG_CHECKPOINT) += cptrst.o
 
-cptrst-objs := sys.o checkpoint.o cpt_process.o cpt_mm.o
+cptrst-objs := sys.o checkpoint.o cpt_process.o cpt_mm.o restart.o
diff --git a/cpt/cpt.h b/cpt/cpt.h
index 73ae296..6471246 100644
--- a/cpt/cpt.h
+++ b/cpt/cpt.h
@@ -59,3 +59,4 @@ extern int debug_level;
 int dump_container(struct cpt_context *ctx);
 int cpt_dump_task(struct task_struct *tsk, struct cpt_context *ctx);
 int cpt_dump_mm(struct task_struct *tsk, struct cpt_context *ctx);
+int restart_container(struct cpt_context *ctx);
diff --git a/cpt/restart.c b/cpt/restart.c
new file mode 100644
index 0000000..5770985
--- /dev/null
+++ b/cpt/restart.c
@@ -0,0 +1,87 @@
+/*
+ *  Copyright (C) 2008 Parallels, Inc.
+ *
+ *  Author: Andrey Mirkin <[EMAIL PROTECTED]>
+ *
+ *  This program is free software; you can redistribute it and/or
+ *  modify it under the terms of the GNU General Public License as
+ *  published by the Free Software Foundation, version 2 of the
+ *  License.
+ *
+ */
+
+#include <linux/sched.h>
+#include <linux/fs.h>
+#include <linux/file.h>
+#include <linux/version.h>
+
+#include "cpt.h"
+#include "cpt_image.h"
+
+int rst_get_object(int type, void *tmp, int size, struct cpt_context *ctx)
+{
+       int err;
+       struct cpt_object_hdr *hdr = tmp;
+       err = ctx->read(hdr, sizeof(struct cpt_object_hdr), ctx);
+       if (err)
+               return err;
+       if (type > 0 && type != hdr->cpt_type)
+               return -EINVAL;
+       if (hdr->cpt_hdrlen < sizeof(struct cpt_object_hdr))
+               return -EINVAL;
+       if (size < sizeof(struct cpt_object_hdr))
+               return -EINVAL;
+       if (hdr->cpt_len < hdr->cpt_hdrlen)
+               return -EINVAL;
+       if (size > hdr->cpt_hdrlen)
+               size = hdr->cpt_hdrlen;
+       if (size > sizeof(*hdr))
+               err = ctx->read(hdr + 1, size - sizeof(*hdr), ctx);
+       return err;
+}
+
+static int rst_read_head(struct cpt_context *ctx)
+{
+       struct cpt_head hdr;
+       int err;
+
+       err = -EBADF;
+       if (!ctx->file)
+               return err;
+
+       err = ctx->read(&hdr, sizeof(hdr), ctx);
+       if (err < 0)
+               return err;
+
+       if (hdr.cpt_signature[0] != CPT_SIGNATURE0 ||
+           hdr.cpt_signature[1] != CPT_SIGNATURE1 ||
+           hdr.cpt_signature[2] != CPT_SIGNATURE2 ||
+           hdr.cpt_signature[3] != CPT_SIGNATURE3) {
+               return -EINVAL;
+       }
+       if (KERNEL_VERSION(hdr.cpt_image_major, hdr.cpt_image_minor,
+                               hdr.cpt_image_sublevel) != LINUX_VERSION_CODE)
+               return -EINVAL;
+
+#if defined(CONFIG_X86_32)
+       if (hdr.cpt_arch != CPT_ARCH_I386)
+               return -ENOSYS;
+#else
+#error  Arch is not supported
+#endif
+
+       return 0;
+}
+
+int restart_container(struct cpt_context *ctx)
+{
+       int err;
+
+       err = rst_read_head(ctx);
+
+       /* Restart process */
+       if (!err)
+               err = -ENOSYS;
+
+       return err;
+}
diff --git a/cpt/sys.c b/cpt/sys.c
index 6801c22..5b453f2 100644
--- a/cpt/sys.c
+++ b/cpt/sys.c
@@ -142,7 +142,7 @@ static int restart(int ctid, int fd, unsigned long flags)
        ctx->ctx_state = CPT_CTX_UNDUMPING;
 
        /* restart */
-       err = -ENOSYS;
+       err = restart_container(ctx);
 
        context_put(ctx);
 
-- 
1.5.6

_______________________________________________
Containers mailing list
[EMAIL PROTECTED]
https://lists.linux-foundation.org/mailman/listinfo/containers

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

Reply via email to