[CRIU] [RFC] mount: Add ability to c/r devtmpfs

Pavel Emelyanov xemul at parallels.com
Fri Oct 17 05:47:30 PDT 2014


On 10/16/2014 08:59 PM, Cyrill Gorcunov wrote:
> 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".

Can we instead compare the dev_t of the devtmpfs
with the host's one and, if match, just dump the
mountpoint?

> 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 {
> 



More information about the CRIU mailing list