[lxc-devel] [PATCH 1/1] preserve_ns: ignore open failures due to ENOENT
Serge Hallyn
serge.hallyn at ubuntu.com
Tue Nov 17 18:48:59 UTC 2015
Quoting Stéphane Graber (stgraber at ubuntu.com):
> On Tue, Nov 17, 2015 at 06:30:59PM +0000, Serge Hallyn wrote:
> > If some /proc/pid/ns/ns file we want is not supported by the kernel,
> > then just don't do the preserve_ns: don't fail the whole container
> > start.
>
> Should we differentiate between the user actually requesting some
> namespaces to be preserved, and fail in that case vs us preserving all
> namespaces automatically (in which case, we should just skip silently)?
If /proc/pid/ns doesn't exist and the user requests preservation, we currently
skip silently.
> > Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
> > ---
> > src/lxc/start.c | 23 +++++++++++++----------
> > 1 file changed, 13 insertions(+), 10 deletions(-)
> >
> > diff --git a/src/lxc/start.c b/src/lxc/start.c
> > index a294d18..6ed4814 100644
> > --- a/src/lxc/start.c
> > +++ b/src/lxc/start.c
> > @@ -125,7 +125,7 @@ static void close_ns(int ns_fd[LXC_NS_MAX]) {
> > }
> >
> > static int preserve_ns(int ns_fd[LXC_NS_MAX], int clone_flags, pid_t pid) {
> > - int i, saved_errno;
> > + int i;
> > char path[MAXPATHLEN];
> >
> > for (i = 0; i < LXC_NS_MAX; i++)
> > @@ -143,18 +143,21 @@ static int preserve_ns(int ns_fd[LXC_NS_MAX], int clone_flags, pid_t pid) {
> > snprintf(path, MAXPATHLEN, "/proc/%d/ns/%s", pid,
> > ns_info[i].proc_name);
> > ns_fd[i] = open(path, O_RDONLY | O_CLOEXEC);
> > - if (ns_fd[i] < 0)
> > - goto error;
> > + if (ns_fd[i] < 0) {
> > + int ret;
> > + if (errno == ENOENT) {
> > + SYSERROR("failed to open '%s'; continuing", path);
>
> Doesn't that mean that on pre-3.8 you'll be getting a scary looking
> error per namespace?
... you already get the
WARN("Kernel does not support attach; preserve_ns ignored");
and it does say "continuing".
> > + ret = 0;
> > + } else {
> > + SYSERROR("failed to open '%s'; aborting", path);
> > + ret = -1;
> > + }
> > + close_ns(ns_fd);
> > + return ret;
> > + }
> > }
> >
> > return 0;
> > -
> > -error:
> > - saved_errno = errno;
> > - close_ns(ns_fd);
> > - errno = saved_errno;
> > - SYSERROR("failed to open '%s'", path);
> > - return -1;
> > }
> >
> > static int attach_ns(const int ns_fd[LXC_NS_MAX]) {
> > --
> > 2.5.0
> >
> > _______________________________________________
> > lxc-devel mailing list
> > lxc-devel at lists.linuxcontainers.org
> > http://lists.linuxcontainers.org/listinfo/lxc-devel
>
> --
> Stéphane Graber
> Ubuntu developer
> http://www.ubuntu.com
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel
More information about the lxc-devel
mailing list