From: "Serge E. Hallyn" <serue@us.ibm.com>
To: Andrey Mirkin <major@openvz.org>
Cc: linux-kernel@vger.kernel.org, containers@lists.linux-foundation.org
Subject: Re: [PATCH 2/9] Make checkpoint/restart functionality modular
Date: Wed, 3 Sep 2008 09:27:20 -0500 [thread overview]
Message-ID: <20080903142720.GC13425@us.ibm.com> (raw)
In-Reply-To: <1220439476-16465-3-git-send-email-major@openvz.org>
Quoting Andrey Mirkin (major@openvz.org):
> A config option CONFIG_CHECKPOINT is introduced.
> New structure cpt_operations is introduced to store pointers to
> checkpoint/restart functions from module.
Thanks Andrey. The structure of this patchset is very nice, and I'm
finding it very easy to read, at least the first half.
The differences (in yours and Oren's) between checkpointing and
restarting yourself or another task should probably not be important
as people will want to be able to do both in the end, and I'm sure
both patchsets can do both. And you have things like your own
printk helpers in patch 3 that, just as in Oren's set, will have to
go away. But I'm not yet able to see what the real differences are.
Keeping on looking...
> Signed-off-by: Andrey Mirkin <major@openvz.org>
> ---
> cpt/Kconfig | 7 +++++++
> cpt/Makefile | 4 ++++
> cpt/cpt.h | 19 +++++++++++++++++++
> cpt/sys.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
> cpt/sys_core.c | 29 +++++++++++++++++++++++++++--
> init/Kconfig | 2 ++
> 6 files changed, 107 insertions(+), 2 deletions(-)
> create mode 100644 cpt/Kconfig
> create mode 100644 cpt/cpt.h
> create mode 100644 cpt/sys.c
>
> diff --git a/cpt/Kconfig b/cpt/Kconfig
> new file mode 100644
> index 0000000..b9bc72d
> --- /dev/null
> +++ b/cpt/Kconfig
> @@ -0,0 +1,7 @@
> +config CHECKPOINT
> + tristate "Checkpoint & restart for containers"
> + depends on EXPERIMENTAL
> + default n
> + help
> + This option adds module "cptrst", which allow to save a running
> + container to a file and restart it later using this image file.
> diff --git a/cpt/Makefile b/cpt/Makefile
> index 2276fb1..bfe75d5 100644
> --- a/cpt/Makefile
> +++ b/cpt/Makefile
> @@ -1 +1,5 @@
> obj-y += sys_core.o
> +
> +obj-$(CONFIG_CHECKPOINT) += cptrst.o
> +
> +cptrst-objs := sys.o
> diff --git a/cpt/cpt.h b/cpt/cpt.h
> new file mode 100644
> index 0000000..381a9bf
> --- /dev/null
> +++ b/cpt/cpt.h
> @@ -0,0 +1,19 @@
> +/*
> + * Copyright (C) 2008 Parallels, Inc.
> + *
> + * Author: Andrey Mirkin <major@openvz.org>
> + *
> + * 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.
> + *
> + */
> +
> +struct cpt_operations
> +{
> + struct module * owner;
> + int (*checkpoint)(pid_t pid, int fd, unsigned long flags);
> + int (*restart)(int ctid, int fd, unsigned long flags);
> +};
> +extern struct cpt_operations cpt_ops;
> diff --git a/cpt/sys.c b/cpt/sys.c
> new file mode 100644
> index 0000000..4051286
> --- /dev/null
> +++ b/cpt/sys.c
> @@ -0,0 +1,48 @@
> +/*
> + * Copyright (C) 2008 Parallels, Inc.
> + *
> + * Author: Andrey Mirkin <major@openvz.org>
> + *
> + * 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/notifier.h>
> +#include <linux/module.h>
> +
> +#include "cpt.h"
> +
> +MODULE_LICENSE("GPL");
> +
> +static int checkpoint(pid_t pid, int fd, unsigned long flags)
> +{
> + return -ENOSYS;
> +}
> +
> +static int restart(int ctid, int fd, unsigned long flags)
> +{
> + return -ENOSYS;
> +}
> +
> +static int __init init_cptrst(void)
> +{
> + cpt_ops.owner = THIS_MODULE;
> + cpt_ops.checkpoint = checkpoint;
> + cpt_ops.restart = restart;
> + return 0;
> +}
> +module_init(init_cptrst);
> +
> +static void __exit exit_cptrst(void)
> +{
> + cpt_ops.checkpoint = NULL;
> + cpt_ops.restart = NULL;
> + cpt_ops.owner = NULL;
> +}
> +module_exit(exit_cptrst);
> diff --git a/cpt/sys_core.c b/cpt/sys_core.c
> index 1a97fb6..5dd1191 100644
> --- a/cpt/sys_core.c
> +++ b/cpt/sys_core.c
> @@ -13,6 +13,13 @@
> #include <linux/sched.h>
> #include <linux/fs.h>
> #include <linux/file.h>
> +#include <linux/notifier.h>
> +#include <linux/module.h>
> +
> +#include "cpt.h"
> +
> +struct cpt_operations cpt_ops = { NULL, NULL, NULL };
> +EXPORT_SYMBOL(cpt_ops);
>
> /**
> * sys_checkpoint - checkpoint a container from outside
> @@ -23,7 +30,16 @@
> */
> asmlinkage long sys_checkpoint(pid_t pid, int fd, unsigned long flags)
> {
> - return -ENOSYS;
> + int ret;
> +
> + ret = -ENOSYS;
> +
> + if (try_module_get(cpt_ops.owner)) {
> + if (cpt_ops.checkpoint)
> + ret = cpt_ops.checkpoint(pid, fd, flags);
> + module_put(cpt_ops.owner);
> + }
> + return ret;
> }
>
> /**
> @@ -34,5 +50,14 @@ asmlinkage long sys_checkpoint(pid_t pid, int fd, unsigned long flags)
> */
> asmlinkage long sys_restart(int ctid, int fd, unsigned long flags)
> {
> - return -ENOSYS;
> + int ret;
> +
> + ret = -ENOSYS;
> +
> + if (try_module_get(cpt_ops.owner)) {
> + if (cpt_ops.restart)
> + ret = cpt_ops.restart(ctid, fd, flags);
> + module_put(cpt_ops.owner);
> + }
> + return ret;
> }
> diff --git a/init/Kconfig b/init/Kconfig
> index 4bd4b0c..d29ed21 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -344,6 +344,8 @@ config CGROUP_FREEZER
> Provides a way to freeze and unfreeze all tasks in a
> cgroup
>
> +source "cpt/Kconfig"
> +
> config FAIR_GROUP_SCHED
> bool "Group scheduling for SCHED_OTHER"
> depends on GROUP_SCHED
> --
> 1.5.6
>
> _______________________________________________
> Containers mailing list
> Containers@lists.linux-foundation.org
> https://lists.linux-foundation.org/mailman/listinfo/containers
next prev parent reply other threads:[~2008-09-03 14:27 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-03 10:57 [PATCH 0/9] OpenVZ kernel based checkpointing/restart Andrey Mirkin
2008-09-03 10:57 ` [PATCH 1/9] Introduce trivial sys_checkpoint and sys_restore system calls Andrey Mirkin
2008-09-03 10:57 ` [PATCH 2/9] Make checkpoint/restart functionality modular Andrey Mirkin
2008-09-03 10:57 ` [PATCH 3/9] Introduce context structure needed during checkpointing/restart Andrey Mirkin
2008-09-03 10:57 ` [PATCH 4/9] Introduce container dump function Andrey Mirkin
2008-09-03 10:57 ` [PATCH 5/9] Introduce function to dump process Andrey Mirkin
2008-09-03 10:57 ` [PATCH 6/9] Introduce functions to dump mm Andrey Mirkin
2008-09-03 10:57 ` [PATCH 7/9] Introduce function for restarting a container Andrey Mirkin
2008-09-03 10:57 ` [PATCH 8/9] Introduce functions to restart a process Andrey Mirkin
2008-09-03 10:57 ` [PATCH 9/9] Introduce functions to restore mm Andrey Mirkin
2008-09-03 14:32 ` [PATCH 8/9] Introduce functions to restart a process Louis Rilling
2008-09-13 17:34 ` Pavel Machek
2008-09-03 14:17 ` [PATCH 6/9] Introduce functions to dump mm Louis Rilling
2008-09-03 14:23 ` [PATCH 4/9] Introduce container dump function Serge E. Hallyn
2008-09-03 14:45 ` Andrey Mirkin
2008-09-03 12:29 ` [PATCH 3/9] Introduce context structure needed during checkpointing/restart Matthieu Fertré
2008-09-03 14:11 ` Andrey Mirkin
2008-09-03 13:56 ` Louis Rilling
2008-09-03 14:07 ` Andrey Mirkin
2008-09-03 14:13 ` Cedric Le Goater
2008-09-03 14:29 ` Andrey Mirkin
2008-09-03 14:27 ` Serge E. Hallyn [this message]
2008-09-03 14:51 ` [PATCH 2/9] Make checkpoint/restart functionality modular Andrey Mirkin
2008-09-03 11:44 ` [PATCH 1/9] Introduce trivial sys_checkpoint and sys_restore system calls Cedric Le Goater
2008-09-03 13:05 ` [Devel] " Andrey Mirkin
2008-09-03 12:28 ` [PATCH 0/9] OpenVZ kernel based checkpointing/restart Cedric Le Goater
2008-09-03 13:59 ` [Devel] " Andrey Mirkin
2008-09-04 22:55 ` Dave Hansen
2008-09-03 14:18 ` Serge E. Hallyn
2008-09-03 13:49 ` Louis Rilling
2008-09-03 14:06 ` Louis Rilling
2008-09-03 14:19 ` Andrey Mirkin
2008-09-03 14:26 ` Cedric Le Goater
2008-09-03 14:53 ` Andrey Mirkin
2008-09-04 8:14 ` Oren Laadan
2008-09-04 14:05 ` Dave Hansen
2008-10-17 23:33 ` Dave Hansen
2008-10-20 11:10 ` Louis Rilling
2008-10-20 13:25 ` Daniel Lezcano
2008-10-20 13:48 ` Cedric Le Goater
2008-10-20 13:49 ` Daniel Lezcano
2008-10-20 15:53 ` Oren Laadan
2008-10-20 16:37 ` Daniel Lezcano
2008-10-20 17:23 ` Serge E. Hallyn
2008-10-21 0:18 ` Oren Laadan
2008-10-21 0:58 ` Serge E. Hallyn
2008-10-21 13:24 ` Daniel Lezcano
2008-10-27 14:45 ` [Devel] " Andrey Mirkin
2008-10-20 16:51 ` Serge E. Hallyn
2008-10-21 9:36 ` Cedric Le Goater
2008-10-20 16:36 ` Dave Hansen
2008-10-20 12:14 ` [Devel] " Andrey Mirkin
2008-10-20 15:55 ` Dave Hansen
2008-10-27 14:07 ` Andrey Mirkin
2008-10-27 14:39 ` Oren Laadan
2008-10-30 6:02 ` Andrey Mirkin
2008-10-30 11:47 ` Louis Rilling
2008-10-30 17:08 ` Dave Hansen
2008-10-30 18:01 ` Louis Rilling
2008-10-30 18:28 ` Oren Laadan
2008-10-30 17:45 ` Oren Laadan
2008-10-30 18:14 ` Louis Rilling
2008-10-30 18:32 ` Oren Laadan
2008-10-31 10:37 ` Louis Rilling
2008-10-30 14:08 ` Serge E. Hallyn
2008-10-30 17:03 ` Dave Hansen
2008-11-03 19:35 ` Oren Laadan
2008-10-20 17:17 ` Oren Laadan
2008-10-27 14:38 ` Andrey Mirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080903142720.GC13425@us.ibm.com \
--to=serue@us.ibm.com \
--cc=containers@lists.linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=major@openvz.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).