diff --git a/[refs] b/[refs] index e4cbd8fa8caf..be018139b9b9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7dc00c82cbb0119cf4663f65bbaa2cc55f961db2 +refs/heads/master: b89fb7da2f9a69dd34ff10d45f66baa40ff8c0e5 diff --git a/trunk/drivers/net/macvlan.c b/trunk/drivers/net/macvlan.c index c02ceaa4a216..980001c2cf96 100644 --- a/trunk/drivers/net/macvlan.c +++ b/trunk/drivers/net/macvlan.c @@ -189,12 +189,20 @@ static int macvlan_open(struct net_device *dev) err = dev_unicast_add(lowerdev, dev->dev_addr, ETH_ALEN); if (err < 0) - return err; - if (dev->flags & IFF_ALLMULTI) - dev_set_allmulti(lowerdev, 1); + goto out; + if (dev->flags & IFF_ALLMULTI) { + err = dev_set_allmulti(lowerdev, 1); + if (err < 0) + goto del_unicast; + } hlist_add_head_rcu(&vlan->hlist, &port->vlan_hash[dev->dev_addr[5]]); return 0; + +del_unicast: + dev_unicast_delete(lowerdev, dev->dev_addr, ETH_ALEN); +out: + return err; } static int macvlan_stop(struct net_device *dev)