From dd8570000504c1893fe0c14262624f585e0418b4 Mon Sep 17 00:00:00 2001 From: Alessandro Boch Date: Thu, 5 Nov 2015 11:59:12 -0800 Subject: [PATCH] Fix bug in bridge driver - On network delete, bridge interface removal is a best effort If netlink fails to remove the interface, we must not restore the network in the bridge network db Signed-off-by: Alessandro Boch --- libnetwork/drivers/bridge/bridge.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libnetwork/drivers/bridge/bridge.go b/libnetwork/drivers/bridge/bridge.go index 6124ccb6cb..c2b9e89dcc 100644 --- a/libnetwork/drivers/bridge/bridge.go +++ b/libnetwork/drivers/bridge/bridge.go @@ -738,7 +738,9 @@ func (d *driver) DeleteNetwork(nid string) error { // We only delete the bridge when it's not the default bridge. This is keep the backward compatible behavior. if !config.DefaultBridge { - err = netlink.LinkDel(n.bridge.Link) + if err := netlink.LinkDel(n.bridge.Link); err != nil { + logrus.Warnf("Failed to remove bridge interface %s on network %s delete: %v", config.BridgeName, nid, err) + } } return d.storeDelete(config) @@ -1037,9 +1039,8 @@ func (d *driver) DeleteEndpoint(nid, eid string) error { // Remove port mappings. Do not stop endpoint delete on unmap failure n.releasePorts(ep) - // Try removal of link. Discard error: link pair might have - // already been deleted by sandbox delete. Make sure defer - // does not see this error either. + // Try removal of link. Discard error: it is a best effort. + // Also make sure defer does not see this error either. if link, err := netlink.LinkByName(ep.srcName); err == nil { netlink.LinkDel(link) }