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
