[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