From 57650a1e5b5de0ee474f5fe0ff7d3be25c19c56a Mon Sep 17 00:00:00 2001 From: Bruce Ma Date: Fri, 19 Jul 2019 21:26:07 +0800 Subject: [PATCH] host-device: revert name setting to make retries idempotent Signed-off-by: Bruce Ma --- plugins/main/host-device/host-device.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/plugins/main/host-device/host-device.go b/plugins/main/host-device/host-device.go index 71c7da3e..799fafe0 100644 --- a/plugins/main/host-device/host-device.go +++ b/plugins/main/host-device/host-device.go @@ -218,14 +218,23 @@ func moveLinkOut(containerNs ns.NetNS, ifName string) error { } // Devices can be renamed only when down - if err := netlink.LinkSetDown(dev); err != nil { + if err = netlink.LinkSetDown(dev); err != nil { return fmt.Errorf("failed to set %q down: %v", ifName, err) } + // Rename device to it's original name - if err := netlink.LinkSetName(dev, dev.Attrs().Alias); err != nil { + if err = netlink.LinkSetName(dev, dev.Attrs().Alias); err != nil { return fmt.Errorf("failed to restore %q to original name %q: %v", ifName, dev.Attrs().Alias, err) } - if err := netlink.LinkSetNsFd(dev, int(defaultNs.Fd())); err != nil { + defer func() { + if err != nil { + // if moving device to host namespace fails, we should revert device name + // to ifName to make sure that device can be found in retries + _ = netlink.LinkSetName(dev, ifName) + } + }() + + if err = netlink.LinkSetNsFd(dev, int(defaultNs.Fd())); err != nil { return fmt.Errorf("failed to move %q to host netns: %v", dev.Attrs().Alias, err) } return nil