diff options
Diffstat (limited to 'net/bridge/br_multicast.c')
| -rw-r--r-- | net/bridge/br_multicast.c | 11 | 
1 files changed, 5 insertions, 6 deletions
| diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index 4b6722f8f179..ff667e18b2d6 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c @@ -1072,7 +1072,7 @@ static int br_ip6_multicast_mld2_report(struct net_bridge *br,  		err = br_ip6_multicast_add_group(br, port, &grec->grec_mca,  						 vid); -		if (!err) +		if (err)  			break;  	} @@ -1167,6 +1167,9 @@ static void br_multicast_add_router(struct net_bridge *br,  	struct net_bridge_port *p;  	struct hlist_node *slot = NULL; +	if (!hlist_unhashed(&port->rlist)) +		return; +  	hlist_for_each_entry(p, &br->router_list, rlist) {  		if ((unsigned long) port >= (unsigned long) p)  			break; @@ -1194,12 +1197,8 @@ static void br_multicast_mark_router(struct net_bridge *br,  	if (port->multicast_router != 1)  		return; -	if (!hlist_unhashed(&port->rlist)) -		goto timer; -  	br_multicast_add_router(br, port); -timer:  	mod_timer(&port->multicast_router_timer,  		  now + br->multicast_querier_interval);  } @@ -1822,7 +1821,7 @@ static void br_multicast_query_expired(struct net_bridge *br,  	if (query->startup_sent < br->multicast_startup_query_count)  		query->startup_sent++; -	RCU_INIT_POINTER(querier, NULL); +	RCU_INIT_POINTER(querier->port, NULL);  	br_multicast_send_query(br, NULL, query);  	spin_unlock(&br->multicast_lock);  } |