On Tue, Feb 18, 2014 at 12:56:29PM -0600, Serge Hallyn wrote:
> Otherwise mount may return -EINVAL if in-kernel super-block parser
> objects (as is the case with ext4).
> 
> Changelog v2:
>       also drop 'optional'
>       specifically drop create=dir, not create=*
>       fix order of arguments for memmove
> 
> Signed-off-by: Serge Hallyn <[email protected]>

Acked-by: Stéphane Graber <[email protected]>

> ---
>  src/lxc/conf.c | 35 ++++++++++++++++++++++++++++++++---
>  1 file changed, 32 insertions(+), 3 deletions(-)
> 
> diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> index d40e3e0..483dff4 100644
> --- a/src/lxc/conf.c
> +++ b/src/lxc/conf.c
> @@ -1881,7 +1881,32 @@ static int mount_entry(const char *fsname, const char 
> *target,
>       return 0;
>  }
>  
> -static inline int mount_entry_on_systemfs(const struct mntent *mntent)
> +/*
> + * Remove 'optional', 'create=dir', and 'create=file' from mntopt
> + */
> +static void cull_mntent_opt(struct mntent *mntent)
> +{
> +     int i;
> +     char *p, *p2;
> +     char *list[] = {"create=dir",
> +                     "create=file",
> +                     "optional",
> +                     NULL };
> +
> +     for (i=0; list[i]; i++) {
> +             if (!(p = strstr(mntent->mnt_opts, list[i])))
> +                     continue;
> +             p2 = strchr(p, ',');
> +             if (!p2) {
> +                     /* no more mntopts, so just chop it here */
> +                     *p = '\0';
> +                     continue;
> +             }
> +             memmove(p, p2+1, strlen(p2+1)+1);
> +     }
> +}
> +
> +static inline int mount_entry_on_systemfs(struct mntent *mntent)
>  {
>       unsigned long mntflags;
>       char *mntdata;
> @@ -1911,6 +1936,8 @@ static inline int mount_entry_on_systemfs(const struct 
> mntent *mntent)
>                       fclose(pathfile);
>       }
>  
> +     cull_mntent_opt(mntent);
> +
>       if (parse_mntopts(mntent->mnt_opts, &mntflags, &mntdata) < 0) {
>               free(mntdata);
>               return -1;
> @@ -1928,7 +1955,7 @@ static inline int mount_entry_on_systemfs(const struct 
> mntent *mntent)
>       return ret;
>  }
>  
> -static int mount_entry_on_absolute_rootfs(const struct mntent *mntent,
> +static int mount_entry_on_absolute_rootfs(struct mntent *mntent,
>                                         const struct lxc_rootfs *rootfs,
>                                         const char *lxc_name)
>  {
> @@ -1998,6 +2025,7 @@ skipabs:
>               else
>                       fclose(pathfile);
>       }
> +     cull_mntent_opt(mntent);
>  
>       if (parse_mntopts(mntent->mnt_opts, &mntflags, &mntdata) < 0) {
>               free(mntdata);
> @@ -2017,7 +2045,7 @@ out:
>       return ret;
>  }
>  
> -static int mount_entry_on_relative_rootfs(const struct mntent *mntent,
> +static int mount_entry_on_relative_rootfs(struct mntent *mntent,
>                                         const char *rootfs)
>  {
>       char path[MAXPATHLEN];
> @@ -2055,6 +2083,7 @@ static int mount_entry_on_relative_rootfs(const struct 
> mntent *mntent,
>               else
>                       fclose(pathfile);
>       }
> +     cull_mntent_opt(mntent);
>  
>       if (parse_mntopts(mntent->mnt_opts, &mntflags, &mntdata) < 0) {
>               free(mntdata);
> -- 
> 1.9.rc1
> 
> _______________________________________________
> lxc-devel mailing list
> [email protected]
> http://lists.linuxcontainers.org/listinfo/lxc-devel

-- 
Stéphane Graber
Ubuntu developer
http://www.ubuntu.com

Attachment: signature.asc
Description: Digital signature

_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to