[CRIU] [PATCH 1/1] simplify the "ignore filesystem-subtype" logic
Tycho Andersen
tycho.andersen at canonical.com
Fri Apr 10 09:34:54 PDT 2015
On Fri, Apr 10, 2015 at 06:24:50PM +0200, Oleg Nesterov wrote:
> We can simply overwrite the dot symbol right after the kernel reports
> it to us.
I have no objections, although is it possible that we would ever want
this information? e.g. to pass to a plugin that knows how to unmount a
specific fuse filesystem?
Tycho
> Signed-off-by: Oleg Nesterov <oleg at redhat.com>
> ---
> mount.c | 17 +----------------
> proc_parse.c | 10 +++++++++-
> 2 files changed, 10 insertions(+), 17 deletions(-)
>
> diff --git a/mount.c b/mount.c
> index b370627..8b57729 100644
> --- a/mount.c
> +++ b/mount.c
> @@ -1344,7 +1344,7 @@ bool add_fsname_auto(const char *names)
> return fsauto_names != NULL;
> }
>
> -static struct fstype *__find_fstype_by_name(char *_fst, bool force_auto)
> +static struct fstype *__find_fstype_by_name(char *fst, bool force_auto)
> {
> int i;
>
> @@ -1354,22 +1354,7 @@ static struct fstype *__find_fstype_by_name(char *_fst, bool force_auto)
> * anything is wrong, almost every fs has its own features)
> * 2nd -- save some space in the image (since we scan all
> * names anyway)
> - *
> - * The kernel reports "subtypes" sometimes and the valid
> - * type-vs-subtype delimiter is the dot symbol. We disregard any
> - * subtypes for the purpose of finding the fstype.
> */
> - char fst[1024];
> -
> - for (i = 0; _fst[i] && i < sizeof(fst) - 1; i++) {
> - if (_fst[i] == '.')
> - break;
> -
> - fst[i] = _fst[i];
> - }
> -
> - fst[i] = 0;
> -
> for (i = 1; i < ARRAY_SIZE(fstypes); i++) {
> struct fstype *fstype = fstypes + i;
>
> diff --git a/proc_parse.c b/proc_parse.c
> index 2f05699..5d50979 100644
> --- a/proc_parse.c
> +++ b/proc_parse.c
> @@ -947,7 +947,7 @@ static int parse_mountinfo_ent(char *str, struct mount_info *new, char **fsname)
> {
> unsigned int kmaj, kmin;
> int ret, n;
> - char *opt = NULL;
> + char *sub, *opt = NULL;
>
> new->mountpoint = xmalloc(PATH_MAX);
> if (new->mountpoint == NULL)
> @@ -981,6 +981,14 @@ static int parse_mountinfo_ent(char *str, struct mount_info *new, char **fsname)
> ret = sscanf(str, "%ms %ms %ms", fsname, &new->source, &opt);
> if (ret != 3)
> goto err;
> + /*
> + * The kernel reports "subtypes" sometimes and the valid
> + * type-vs-subtype delimiter is the dot symbol. We disregard
> + * any subtypes for the purpose of finding the fstype.
> + */
> + sub = strchr(*fsname, '.');
> + if (sub)
> + *sub = 0;
>
> new->fstype = find_fstype_by_name(*fsname);
>
> --
> 1.5.5.1
>
>
More information about the CRIU
mailing list