aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_multicast.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/bridge/br_multicast.c')
-rw-r--r--net/bridge/br_multicast.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c
index c5fea9393946..2136e45f5277 100644
--- a/net/bridge/br_multicast.c
+++ b/net/bridge/br_multicast.c
@@ -972,13 +972,12 @@ static void br_multicast_enable(struct bridge_mcast_own_query *query)
972 mod_timer(&query->timer, jiffies); 972 mod_timer(&query->timer, jiffies);
973} 973}
974 974
975void br_multicast_enable_port(struct net_bridge_port *port) 975static void __br_multicast_enable_port(struct net_bridge_port *port)
976{ 976{
977 struct net_bridge *br = port->br; 977 struct net_bridge *br = port->br;
978 978
979 spin_lock(&br->multicast_lock);
980 if (br->multicast_disabled || !netif_running(br->dev)) 979 if (br->multicast_disabled || !netif_running(br->dev))
981 goto out; 980 return;
982 981
983 br_multicast_enable(&port->ip4_own_query); 982 br_multicast_enable(&port->ip4_own_query);
984#if IS_ENABLED(CONFIG_IPV6) 983#if IS_ENABLED(CONFIG_IPV6)
@@ -987,8 +986,14 @@ void br_multicast_enable_port(struct net_bridge_port *port)
987 if (port->multicast_router == MDB_RTR_TYPE_PERM && 986 if (port->multicast_router == MDB_RTR_TYPE_PERM &&
988 hlist_unhashed(&port->rlist)) 987 hlist_unhashed(&port->rlist))
989 br_multicast_add_router(br, port); 988 br_multicast_add_router(br, port);
989}
990 990
991out: 991void br_multicast_enable_port(struct net_bridge_port *port)
992{
993 struct net_bridge *br = port->br;
994
995 spin_lock(&br->multicast_lock);
996 __br_multicast_enable_port(port);
992 spin_unlock(&br->multicast_lock); 997 spin_unlock(&br->multicast_lock);
993} 998}
994 999
@@ -1994,8 +1999,9 @@ static void br_multicast_start_querier(struct net_bridge *br,
1994 1999
1995int br_multicast_toggle(struct net_bridge *br, unsigned long val) 2000int br_multicast_toggle(struct net_bridge *br, unsigned long val)
1996{ 2001{
1997 int err = 0;
1998 struct net_bridge_mdb_htable *mdb; 2002 struct net_bridge_mdb_htable *mdb;
2003 struct net_bridge_port *port;
2004 int err = 0;
1999 2005
2000 spin_lock_bh(&br->multicast_lock); 2006 spin_lock_bh(&br->multicast_lock);
2001 if (br->multicast_disabled == !val) 2007 if (br->multicast_disabled == !val)
@@ -2023,10 +2029,9 @@ rollback:
2023 goto rollback; 2029 goto rollback;
2024 } 2030 }
2025 2031
2026 br_multicast_start_querier(br, &br->ip4_own_query); 2032 br_multicast_open(br);
2027#if IS_ENABLED(CONFIG_IPV6) 2033 list_for_each_entry(port, &br->port_list, list)
2028 br_multicast_start_querier(br, &br->ip6_own_query); 2034 __br_multicast_enable_port(port);
2029#endif
2030 2035
2031unlock: 2036unlock:
2032 spin_unlock_bh(&br->multicast_lock); 2037 spin_unlock_bh(&br->multicast_lock);