diff options
-rw-r--r-- | net/bridge/br_multicast.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index 22fd0419b314..ff667e18b2d6 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c | |||
@@ -1167,6 +1167,9 @@ static void br_multicast_add_router(struct net_bridge *br, | |||
1167 | struct net_bridge_port *p; | 1167 | struct net_bridge_port *p; |
1168 | struct hlist_node *slot = NULL; | 1168 | struct hlist_node *slot = NULL; |
1169 | 1169 | ||
1170 | if (!hlist_unhashed(&port->rlist)) | ||
1171 | return; | ||
1172 | |||
1170 | hlist_for_each_entry(p, &br->router_list, rlist) { | 1173 | hlist_for_each_entry(p, &br->router_list, rlist) { |
1171 | if ((unsigned long) port >= (unsigned long) p) | 1174 | if ((unsigned long) port >= (unsigned long) p) |
1172 | break; | 1175 | break; |
@@ -1194,12 +1197,8 @@ static void br_multicast_mark_router(struct net_bridge *br, | |||
1194 | if (port->multicast_router != 1) | 1197 | if (port->multicast_router != 1) |
1195 | return; | 1198 | return; |
1196 | 1199 | ||
1197 | if (!hlist_unhashed(&port->rlist)) | ||
1198 | goto timer; | ||
1199 | |||
1200 | br_multicast_add_router(br, port); | 1200 | br_multicast_add_router(br, port); |
1201 | 1201 | ||
1202 | timer: | ||
1203 | mod_timer(&port->multicast_router_timer, | 1202 | mod_timer(&port->multicast_router_timer, |
1204 | now + br->multicast_querier_interval); | 1203 | now + br->multicast_querier_interval); |
1205 | } | 1204 | } |