diff options
Diffstat (limited to 'net/bridge/br_device.c')
| -rw-r--r-- | net/bridge/br_device.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index 2c8095a5d824..8eecd0ec22f2 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c | |||
| @@ -104,8 +104,16 @@ static int br_dev_init(struct net_device *dev) | |||
| 104 | return -ENOMEM; | 104 | return -ENOMEM; |
| 105 | 105 | ||
| 106 | err = br_vlan_init(br); | 106 | err = br_vlan_init(br); |
| 107 | if (err) | 107 | if (err) { |
| 108 | free_percpu(br->stats); | 108 | free_percpu(br->stats); |
| 109 | return err; | ||
| 110 | } | ||
| 111 | |||
| 112 | err = br_multicast_init_stats(br); | ||
| 113 | if (err) { | ||
| 114 | free_percpu(br->stats); | ||
| 115 | br_vlan_flush(br); | ||
| 116 | } | ||
| 109 | br_set_lockdep_class(dev); | 117 | br_set_lockdep_class(dev); |
| 110 | 118 | ||
| 111 | return err; | 119 | return err; |
| @@ -341,6 +349,8 @@ static const struct net_device_ops br_netdev_ops = { | |||
| 341 | .ndo_add_slave = br_add_slave, | 349 | .ndo_add_slave = br_add_slave, |
| 342 | .ndo_del_slave = br_del_slave, | 350 | .ndo_del_slave = br_del_slave, |
| 343 | .ndo_fix_features = br_fix_features, | 351 | .ndo_fix_features = br_fix_features, |
| 352 | .ndo_neigh_construct = netdev_default_l2upper_neigh_construct, | ||
| 353 | .ndo_neigh_destroy = netdev_default_l2upper_neigh_destroy, | ||
| 344 | .ndo_fdb_add = br_fdb_add, | 354 | .ndo_fdb_add = br_fdb_add, |
| 345 | .ndo_fdb_del = br_fdb_delete, | 355 | .ndo_fdb_del = br_fdb_delete, |
| 346 | .ndo_fdb_dump = br_fdb_dump, | 356 | .ndo_fdb_dump = br_fdb_dump, |
