Quoting Michael H. Warfield ([email protected]):
> Check for symlinks before attempting create.
> 
> When attempting to create the compulsory symlinks in /dev,
> check for the existence of the link using stat first before
> blindly attempting to create the link.
> 
> This works around an apparent quirk in the kernel VFS on read-only
> file systems where the returned error code might be EEXIST or EROFS
> depending on previous access to the /dev directory and its entries.
> 
> Signed-off-by: Michael H. Warfield <[email protected]>

Thanks, Michael!

Acked-by: Serge Hallyn <[email protected]>

> ---
>  src/lxc/conf.c | 19 +++++++++++++++++--
>  1 file changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> index 06235fb..18da296 100644
> --- a/src/lxc/conf.c
> +++ b/src/lxc/conf.c
> @@ -828,6 +828,7 @@ static int setup_dev_symlinks(const struct lxc_rootfs 
> *rootfs)
>  {
>       char path[MAXPATHLEN];
>       int ret,i;
> +     struct stat s;
>  
>  
>       for (i = 0; i < sizeof(dev_symlinks) / sizeof(dev_symlinks[0]); i++) {
> @@ -835,10 +836,24 @@ static int setup_dev_symlinks(const struct lxc_rootfs 
> *rootfs)
>               ret = snprintf(path, sizeof(path), "%s/dev/%s", rootfs->mount, 
> d->name);
>               if (ret < 0 || ret >= MAXPATHLEN)
>                       return -1;
> +
> +             /*
> +              * Stat the path first.  If we don't get an error
> +              * accept it as is and don't try to create it
> +              */
> +             if (!stat(path, &s)) {
> +                     continue;
> +             }
> +
>               ret = symlink(d->oldpath, path);
> +
>               if (ret && errno != EEXIST) {
> -                     SYSERROR("Error creating %s", path);
> -                     return -1;
> +                     if ( errno == EROFS ) {
> +                             WARN("Warning: Read Only file system while 
> creating %s", path);
> +                     } else {
> +                             SYSERROR("Error creating %s", path);
> +                             return -1;
> +                     }
>               }
>       }
>       return 0;
> -- 
> 1.9.0
> 
> 
> 
> 
> -- 
> Michael H. Warfield (AI4NB) | (770) 978-7061 |  [email protected]
>    /\/\|=mhw=|\/\/          | (678) 463-0932 |  http://www.wittsend.com/mhw/
>    NIC whois: MHW9          | An optimist believes we live in the best of all
>  PGP Key: 0x674627FF        | possible worlds.  A pessimist is sure of it!
> 



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

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

Reply via email to