bridge: Do not unregister all PF_BRIDGE rtnl operations
Bridge fdb and link rtnl operations are registered in core/rtnetlink. Bridge mdb operations are registred in bridge/mdb. When removing bridge module, do not unregister ALL PF_BRIDGE ops since that would remove the ops from rtnetlink as well. Do remove mdb ops when bridge is destroyed. Signed-off-by: Vlad Yasevich <vyasevic@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a5e40708c4
commit
63233159fd
4 changed files with 9 additions and 1 deletions
|
@ -482,3 +482,10 @@ void br_mdb_init(void)
|
||||||
rtnl_register(PF_BRIDGE, RTM_NEWMDB, br_mdb_add, NULL, NULL);
|
rtnl_register(PF_BRIDGE, RTM_NEWMDB, br_mdb_add, NULL, NULL);
|
||||||
rtnl_register(PF_BRIDGE, RTM_DELMDB, br_mdb_del, NULL, NULL);
|
rtnl_register(PF_BRIDGE, RTM_DELMDB, br_mdb_del, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void br_mdb_uninit(void)
|
||||||
|
{
|
||||||
|
rtnl_unregister(PF_BRIDGE, RTM_GETMDB);
|
||||||
|
rtnl_unregister(PF_BRIDGE, RTM_NEWMDB);
|
||||||
|
rtnl_unregister(PF_BRIDGE, RTM_DELMDB);
|
||||||
|
}
|
||||||
|
|
|
@ -1633,6 +1633,7 @@ void br_multicast_stop(struct net_bridge *br)
|
||||||
del_timer_sync(&br->multicast_querier_timer);
|
del_timer_sync(&br->multicast_querier_timer);
|
||||||
del_timer_sync(&br->multicast_query_timer);
|
del_timer_sync(&br->multicast_query_timer);
|
||||||
|
|
||||||
|
br_mdb_uninit();
|
||||||
spin_lock_bh(&br->multicast_lock);
|
spin_lock_bh(&br->multicast_lock);
|
||||||
mdb = mlock_dereference(br->mdb, br);
|
mdb = mlock_dereference(br->mdb, br);
|
||||||
if (!mdb)
|
if (!mdb)
|
||||||
|
|
|
@ -305,5 +305,4 @@ int __init br_netlink_init(void)
|
||||||
void __exit br_netlink_fini(void)
|
void __exit br_netlink_fini(void)
|
||||||
{
|
{
|
||||||
rtnl_link_unregister(&br_link_ops);
|
rtnl_link_unregister(&br_link_ops);
|
||||||
rtnl_unregister_all(PF_BRIDGE);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -447,6 +447,7 @@ extern struct net_bridge_port_group *br_multicast_new_port_group(
|
||||||
struct net_bridge_port_group *next,
|
struct net_bridge_port_group *next,
|
||||||
unsigned char state);
|
unsigned char state);
|
||||||
extern void br_mdb_init(void);
|
extern void br_mdb_init(void);
|
||||||
|
extern void br_mdb_uninit(void);
|
||||||
extern void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
|
extern void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
|
||||||
struct br_ip *group, int type);
|
struct br_ip *group, int type);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue