diff options
Diffstat (limited to 'net/bridge')
-rw-r--r-- | net/bridge/br_multicast.c | 2 | ||||
-rw-r--r-- | net/bridge/br_netlink.c | 13 | ||||
-rw-r--r-- | net/bridge/br_private.h | 6 |
3 files changed, 18 insertions, 3 deletions
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index 5391ca43336a..6d6f26531de2 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c | |||
@@ -1608,7 +1608,6 @@ void br_multicast_init(struct net_bridge *br) | |||
1608 | br_multicast_querier_expired, (unsigned long)br); | 1608 | br_multicast_querier_expired, (unsigned long)br); |
1609 | setup_timer(&br->multicast_query_timer, br_multicast_query_expired, | 1609 | setup_timer(&br->multicast_query_timer, br_multicast_query_expired, |
1610 | (unsigned long)br); | 1610 | (unsigned long)br); |
1611 | br_mdb_init(); | ||
1612 | } | 1611 | } |
1613 | 1612 | ||
1614 | void br_multicast_open(struct net_bridge *br) | 1613 | void br_multicast_open(struct net_bridge *br) |
@@ -1633,7 +1632,6 @@ void br_multicast_stop(struct net_bridge *br) | |||
1633 | del_timer_sync(&br->multicast_querier_timer); | 1632 | del_timer_sync(&br->multicast_querier_timer); |
1634 | del_timer_sync(&br->multicast_query_timer); | 1633 | del_timer_sync(&br->multicast_query_timer); |
1635 | 1634 | ||
1636 | br_mdb_uninit(); | ||
1637 | spin_lock_bh(&br->multicast_lock); | 1635 | spin_lock_bh(&br->multicast_lock); |
1638 | mdb = mlock_dereference(br->mdb, br); | 1636 | mdb = mlock_dereference(br->mdb, br); |
1639 | if (!mdb) | 1637 | if (!mdb) |
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c index 97ba0189c6f7..5dc66abcc9e2 100644 --- a/net/bridge/br_netlink.c +++ b/net/bridge/br_netlink.c | |||
@@ -299,10 +299,21 @@ struct rtnl_link_ops br_link_ops __read_mostly = { | |||
299 | 299 | ||
300 | int __init br_netlink_init(void) | 300 | int __init br_netlink_init(void) |
301 | { | 301 | { |
302 | return rtnl_link_register(&br_link_ops); | 302 | int err; |
303 | |||
304 | br_mdb_init(); | ||
305 | err = rtnl_link_register(&br_link_ops); | ||
306 | if (err) | ||
307 | goto out; | ||
308 | |||
309 | return 0; | ||
310 | out: | ||
311 | br_mdb_uninit(); | ||
312 | return err; | ||
303 | } | 313 | } |
304 | 314 | ||
305 | void __exit br_netlink_fini(void) | 315 | void __exit br_netlink_fini(void) |
306 | { | 316 | { |
317 | br_mdb_uninit(); | ||
307 | rtnl_link_unregister(&br_link_ops); | 318 | rtnl_link_unregister(&br_link_ops); |
308 | } | 319 | } |
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index 8d83be5ffedc..711094aed41a 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h | |||
@@ -526,6 +526,12 @@ static inline bool br_multicast_is_router(struct net_bridge *br) | |||
526 | { | 526 | { |
527 | return 0; | 527 | return 0; |
528 | } | 528 | } |
529 | static inline void br_mdb_init(void) | ||
530 | { | ||
531 | } | ||
532 | static inline void br_mdb_uninit(void) | ||
533 | { | ||
534 | } | ||
529 | #endif | 535 | #endif |
530 | 536 | ||
531 | /* br_netfilter.c */ | 537 | /* br_netfilter.c */ |