|
@@ -627,8 +627,6 @@ static void vlan_dev_uninit(struct net_device *dev)
|
|
|
struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
|
|
|
int i;
|
|
|
|
|
|
- free_percpu(vlan->vlan_pcpu_stats);
|
|
|
- vlan->vlan_pcpu_stats = NULL;
|
|
|
for (i = 0; i < ARRAY_SIZE(vlan->egress_priority_map); i++) {
|
|
|
while ((pm = vlan->egress_priority_map[i]) != NULL) {
|
|
|
vlan->egress_priority_map[i] = pm->next;
|
|
@@ -785,6 +783,15 @@ static const struct net_device_ops vlan_netdev_ops = {
|
|
|
.ndo_get_lock_subclass = vlan_dev_get_lock_subclass,
|
|
|
};
|
|
|
|
|
|
+static void vlan_dev_free(struct net_device *dev)
|
|
|
+{
|
|
|
+ struct vlan_dev_priv *vlan = vlan_dev_priv(dev);
|
|
|
+
|
|
|
+ free_percpu(vlan->vlan_pcpu_stats);
|
|
|
+ vlan->vlan_pcpu_stats = NULL;
|
|
|
+ free_netdev(dev);
|
|
|
+}
|
|
|
+
|
|
|
void vlan_setup(struct net_device *dev)
|
|
|
{
|
|
|
ether_setup(dev);
|
|
@@ -794,7 +801,7 @@ void vlan_setup(struct net_device *dev)
|
|
|
dev->tx_queue_len = 0;
|
|
|
|
|
|
dev->netdev_ops = &vlan_netdev_ops;
|
|
|
- dev->destructor = free_netdev;
|
|
|
+ dev->destructor = vlan_dev_free;
|
|
|
dev->ethtool_ops = &vlan_ethtool_ops;
|
|
|
|
|
|
memset(dev->broadcast, 0, ETH_ALEN);
|