Quoting Wolfgang Bumiller (w.bumil...@proxmox.com):
> When setting lxc.network.veth.pair to get a fixed interface
> name the recreation of it after a reboot caused an EEXIST.
> -) The reboot flag is now a three-state value. It's set to
> 1 to request a reboot, and 2 during a reboot until after
> lxc_spawn where it is reset to 0.
> -) If the reboot is set (!= 0) within instantiate_veth and
> a fixed name is used, the interface is now deleted before
> being recreated.
> 
> Signed-off-by: Wolfgang Bumiller <w.bumil...@proxmox.com>

Thank you!

Acked-by: Serge E. Hallyn <serge.hal...@ubuntu.com>

> ---
>  src/lxc/conf.c         | 6 ++++--
>  src/lxc/lxccontainer.c | 6 +++---
>  src/lxc/start.c        | 2 ++
>  3 files changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/src/lxc/conf.c b/src/lxc/conf.c
> index 9870455..ed2ad66 100644
> --- a/src/lxc/conf.c
> +++ b/src/lxc/conf.c
> @@ -2613,9 +2613,11 @@ static int instantiate_veth(struct lxc_handler 
> *handler, struct lxc_netdev *netd
>       char veth2buf[IFNAMSIZ], *veth2;
>       int err;
>  
> -     if (netdev->priv.veth_attr.pair)
> +     if (netdev->priv.veth_attr.pair) {
>               veth1 = netdev->priv.veth_attr.pair;
> -     else {
> +             if (handler->conf->reboot)
> +                     lxc_netdev_delete_by_name(veth1);
> +     } else {
>               err = snprintf(veth1buf, sizeof(veth1buf), "vethXXXXXX");
>               if (err >= sizeof(veth1buf)) { /* can't *really* happen, but... 
> */
>                       ERROR("veth1 name too long");
> diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
> index 1c103e8..223e78e 100644
> --- a/src/lxc/lxccontainer.c
> +++ b/src/lxc/lxccontainer.c
> @@ -760,9 +760,9 @@ static bool do_lxcapi_start(struct lxc_container *c, int 
> useinit, char * const a
>               pid_fp = NULL;
>       }
>  
> -reboot:
>       conf->reboot = 0;
>  
> +reboot:
>       if (lxc_check_inherited(conf, daemonize, -1)) {
>               ERROR("Inherited fds found");
>               ret = 1;
> @@ -772,9 +772,9 @@ reboot:
>       ret = lxc_start(c->name, argv, conf, c->config_path, daemonize);
>       c->error_num = ret;
>  
> -     if (conf->reboot) {
> +     if (conf->reboot == 1) {
>               INFO("container requested reboot");
> -             conf->reboot = 0;
> +             conf->reboot = 2;
>               goto reboot;
>       }
>  
> diff --git a/src/lxc/start.c b/src/lxc/start.c
> index 6eded61..2fc026e 100644
> --- a/src/lxc/start.c
> +++ b/src/lxc/start.c
> @@ -1173,6 +1173,8 @@ int __lxc_start(const char *name, struct lxc_conf *conf,
>               goto out_detach_blockdev;
>       }
>  
> +     handler->conf->reboot = 0;
> +
>       netnsfd = get_netns_fd(handler->pid);
>  
>       err = lxc_poll(name, handler);
> -- 
> 2.1.4
> 
> 
> _______________________________________________
> lxc-devel mailing list
> lxc-devel@lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to