[CRIU] [RFC] mount: Add ability to c/r devtmpfs
Cyrill Gorcunov
gorcunov at openvz.org
Thu Oct 16 09:59:37 PDT 2014
Looking into experiments with OpenVZ kernel
it seems plain tar over devtmpfs should be
enough for a while. So here is a new option
comes in "--devtmpfs-content".
Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
crtools.c | 5 +++++
include/cr_options.h | 1 +
lib/criu.c | 6 ++++++
lib/criu.h | 1 +
mount.c | 16 ++++++++++++++++
protobuf/rpc.proto | 1 +
6 files changed, 30 insertions(+)
diff --git a/crtools.c b/crtools.c
index 0ac667cd8eda..196ac56a2502 100644
--- a/crtools.c
+++ b/crtools.c
@@ -187,6 +187,7 @@ int main(int argc, char *argv[], char *envp[])
{ "exec-cmd", no_argument, 0, 1059},
{ "manage-cgroups", no_argument, 0, 1060},
{ "cgroup-root", required_argument, 0, 1061},
+ { "devtmpfs-content", no_argument, 0, 1062},
{ },
};
@@ -392,6 +393,9 @@ int main(int argc, char *argv[], char *envp[])
return -1;
}
break;
+ case 1062:
+ opts.devtmpfs_content = true;
+ break;
case 'M':
{
char *aux;
@@ -604,6 +608,7 @@ usage:
" change the root cgroup the controller will be\n"
" installed into. No controller means that root is the\n"
" default for all controllers not specified.\n"
+" --devtmpfs-content checkpoint/restore content of devtmpfs filesystem.\n"
"\n"
"* Logging:\n"
" -o|--log-file FILE log file name\n"
diff --git a/include/cr_options.h b/include/cr_options.h
index a9f9e92259e6..43d889c47ea7 100644
--- a/include/cr_options.h
+++ b/include/cr_options.h
@@ -58,6 +58,7 @@ struct cr_options {
char *new_global_cg_root;
struct list_head new_cgroup_roots;
bool aufs; /* auto-deteced, not via cli */
+ bool devtmpfs_content;
};
extern struct cr_options opts;
diff --git a/lib/criu.c b/lib/criu.c
index ad419ba1a633..2fcc55fcc59d 100644
--- a/lib/criu.c
+++ b/lib/criu.c
@@ -169,6 +169,12 @@ void criu_set_cpu_cap(unsigned int cap)
opts->cpu_cap = cap;
}
+void criu_set_devtmpfs_content(bool val)
+{
+ opts->has_devtmpfs_content = true;
+ opts->devtmpfs_content = val;
+}
+
int criu_set_exec_cmd(int argc, char *argv[])
{
int i;
diff --git a/lib/criu.h b/lib/criu.h
index 18f911eeaba6..b0cc633034ab 100644
--- a/lib/criu.h
+++ b/lib/criu.h
@@ -46,6 +46,7 @@ void criu_set_link_remap(bool link_remap);
void criu_set_log_level(int log_level);
void criu_set_log_file(char *log_file);
void criu_set_cpu_cap(unsigned int cap);
+void criu_set_devtmpfs_content(bool val);
void criu_set_root(char *root);
void criu_set_manage_cgroups(bool manage);
int criu_set_exec_cmd(int argc, char *argv[]);
diff --git a/mount.c b/mount.c
index a60c86e0f97b..d0dbdb31b791 100644
--- a/mount.c
+++ b/mount.c
@@ -729,6 +729,13 @@ out:
return ret;
}
+static int devtmpfs_dump(struct mount_info *pm)
+{
+ if (!opts.devtmpfs_content)
+ return 0;
+ return tmpfs_dump(pm);
+}
+
static int tmpfs_restore(struct mount_info *pm)
{
int ret;
@@ -753,6 +760,13 @@ static int tmpfs_restore(struct mount_info *pm)
return 0;
}
+static int devtmpfs_restore(struct mount_info *pm)
+{
+ if (!opts.devtmpfs_content)
+ return 0;
+ return tmpfs_restore(pm);
+}
+
static int binfmt_misc_dump(struct mount_info *pm)
{
int fd, ret = -1;
@@ -831,6 +845,8 @@ static struct fstype fstypes[] = {
}, {
.name = "devtmpfs",
.code = FSTYPE__DEVTMPFS,
+ .dump = devtmpfs_dump,
+ .restore = devtmpfs_restore,
}, {
.name = "binfmt_misc",
.code = FSTYPE__BINFMT_MISC,
diff --git a/protobuf/rpc.proto b/protobuf/rpc.proto
index d511512c5696..41e4b5706fa3 100644
--- a/protobuf/rpc.proto
+++ b/protobuf/rpc.proto
@@ -55,6 +55,7 @@ message criu_opts {
repeated cgroup_root cg_root = 25;
optional bool rst_sibling = 26; /* swrk only */
+ optional bool devtmpfs_content= 27;
}
message criu_dump_resp {
--
1.9.3
More information about the CRIU
mailing list