Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[linux-drm-fsl-dcu.git] / net / 8021q / vlan.c
index 694be86e449014803255194d5c38206222c81044..5975ec3be7f3ae36635a802002224f7ce3015136 100644 (file)
@@ -384,17 +384,35 @@ static void vlan_sync_address(struct net_device *dev,
        memcpy(vlan->real_dev_addr, dev->dev_addr, ETH_ALEN);
 }
 
+static void __vlan_device_event(struct net_device *dev, unsigned long event)
+{
+       switch (event) {
+       case NETDEV_CHANGENAME:
+               vlan_proc_rem_dev(dev);
+               if (vlan_proc_add_dev(dev) < 0)
+                       pr_warning("8021q: failed to change proc name for %s\n",
+                                       dev->name);
+               break;
+       }
+}
+
 static int vlan_device_event(struct notifier_block *unused, unsigned long event,
                             void *ptr)
 {
        struct net_device *dev = ptr;
-       struct vlan_group *grp = __vlan_find_group(dev->ifindex);
+       struct vlan_group *grp;
        int i, flgs;
        struct net_device *vlandev;
 
        if (dev_net(dev) != &init_net)
                return NOTIFY_DONE;
 
+       if (is_vlan_dev(dev)) {
+               __vlan_device_event(dev, event);
+               goto out;
+       }
+
+       grp = __vlan_find_group(dev->ifindex);
        if (!grp)
                goto out;