Message ID | 20110603200738.GA24804@midget.suse.cz |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index c7a581a..bf89565 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c @@ -371,7 +371,7 @@ static int vlan_device_event(struct notifier_block *unused, unsigned long event, if (is_vlan_dev(dev)) __vlan_device_event(dev, event); - if ((event == NETDEV_UP) && + if ((event == NETDEV_REGISTER) && (dev->features & NETIF_F_HW_VLAN_FILTER) && dev->netdev_ops->ndo_vlan_rx_add_vid) { pr_info("8021q: adding VLAN 0 to HW filter on device %s\n",
Commit ad1afb00 registers a VLAN with vid == 0 for every device to handle 802.1p frames. This is currently done on every NETDEV_UP event and the special vlan is never unregistered. This may have strange effects on drivers implementning ndo_vlan_rx_add_vid(). E.g. bonding will allocate a linked-list element each time, causing a memory leak. Only register the special VLAN once on NETDEV_REGISTER. Signed-off-by: Jiri Bohac <jbohac@suse.cz>