[CRIU] [RFC PATCH 5/6] add --xxx command line option to specify FSTYPE__AUTO names

Pavel Emelyanov xemul at parallels.com
Mon Mar 30 02:46:44 PDT 2015


On 03/27/2015 08:55 PM, Oleg Nesterov wrote:
> Don't tell me this patch is ugly and incomplete, I know ;)
> 
> Add --xxx option. optarg is the comma-separated string or "all".

How about the --enable-fs or --support-fs name for one?

And one more thing, our API is not just CLI, can you also fix the
protobuf/rpc.proto and cr-service.c's setup_opts_from_req() to support
this option in RPC too.

> With this patch "criu dump -t `pidof unshared-mnt-ns-app1" succeeds
> with the following (debugging) output:
> 
> 	Warn  (mount.c:1119): XXX: FSTYPE__AUTO(xfs) -> 1
> 	Warn  (mount.c:1119): XXX: FSTYPE__AUTO(hugetlbfs) -> 1
> 	Warn  (mount.c:1119): XXX: FSTYPE__AUTO(autofs) -> 1
> 	Warn  (mount.c:1119): XXX: FSTYPE__AUTO(configfs) -> 1
> 	Warn  (mount.c:1119): XXX: FSTYPE__AUTO(selinuxfs) -> 1
> 
> Signed-off-by: Oleg Nesterov <oleg at redhat.com>
> ---
>  crtools.c       |    5 +++++
>  include/mount.h |    1 +
>  mount.c         |   27 ++++++++++++++++++++++++++-
>  3 files changed, 32 insertions(+), 1 deletions(-)
> 
> diff --git a/crtools.c b/crtools.c
> index 0b3c497..6745ea6 100644
> --- a/crtools.c
> +++ b/crtools.c
> @@ -203,6 +203,7 @@ int main(int argc, char *argv[], char *envp[])
>  		{ "cgroup-root", required_argument, 0, 1061},
>  		{ "inherit-fd", required_argument, 0, 1062},
>  		{ "feature", required_argument, 0, 1063},
> +		{ "xxx", required_argument, 0, 1064},
>  		{ },
>  	};
>  
> @@ -416,6 +417,10 @@ int main(int argc, char *argv[], char *envp[])
>  			if (check_add_feature(optarg) < 0)
>  				return 1;
>  			break;
> +		case 1064:
> +			if (add_fstype_auto(optarg) < 0)
> +				return 1;
> +			break;
>  		case 'M':
>  			{
>  				char *aux;
> diff --git a/include/mount.h b/include/mount.h
> index f3d31e6..a582d25 100644
> --- a/include/mount.h
> +++ b/include/mount.h
> @@ -13,6 +13,7 @@ struct proc_mountinfo;
>  
>  extern int open_mount(unsigned int s_dev);
>  extern struct fstype *find_fstype_by_name(char *fst);
> +extern int add_fstype_auto(const char *names);
>  
>  struct cr_imgset;
>  extern struct mount_info * collect_mntinfo(struct ns_id *ns);
> diff --git a/mount.c b/mount.c
> index b44ed38..0479b4e 100644
> --- a/mount.c
> +++ b/mount.c
> @@ -1095,9 +1095,34 @@ static struct fstype fstypes[32] = {
>  	},
>  };
>  
> +static char *fsauto_names;
> +
>  static bool fstype_is_auto(const char *name)
>  {
> -	return false;
> +	const char *p;
> +	bool yes = false;
> +
> +	if (!fsauto_names)
> +		goto ret;;
> +
> +	yes = strcmp(fsauto_names, "all") == 0;
> +	if (yes)
> +		goto ret;
> +
> +	for (p = strtok(fsauto_names, ","); p; p = strtok(NULL, ",")) {
> +		yes = strcmp(name, p) == 0;
> +		if (yes)
> +			goto ret;
> +	}
> + ret:
> + 	pr_warn("XXX: FSTYPE__AUTO(%s) -> %d\n", name, yes);
> + 	return yes;
> +}
> +
> +int add_fstype_auto(const char *names)
> +{
> +	fsauto_names = xstrdup(names);
> +	return 0;
>  }
>  
>  static struct fstype *__find_fstype_by_name(char *fst, bool force_auto)
> 



More information about the CRIU mailing list