Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 233419
b: refs/heads/master
c: 8a87017
h: refs/heads/master
i:
  233417: a09d956
  233415: 114c29c
v: v3
  • Loading branch information
Herbert Xu authored and David S. Miller committed Feb 12, 2011
1 parent 0c6c3fa commit 015080d
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 13 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 24f9cdcbd743fd6adb8fb83688d8d86dcccde662
refs/heads/master: 8a870178c0ad1bae9994c99bd01eb10c9903e616
2 changes: 1 addition & 1 deletion trunk/net/bridge/br_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ int br_handle_frame_finish(struct sk_buff *skb)
if (is_multicast_ether_addr(dest)) {
mdst = br_mdb_get(br, skb);
if (mdst || BR_INPUT_SKB_CB_MROUTERS_ONLY(skb)) {
if ((mdst && !hlist_unhashed(&mdst->mglist)) ||
if ((mdst && mdst->mglist) ||
br_multicast_is_router(br))
skb2 = skb;
br_multicast_forward(mdst, skb, skb2);
Expand Down
16 changes: 7 additions & 9 deletions trunk/net/bridge/br_multicast.c
Original file line number Diff line number Diff line change
Expand Up @@ -232,8 +232,7 @@ static void br_multicast_group_expired(unsigned long data)
if (!netif_running(br->dev) || timer_pending(&mp->timer))
goto out;

if (!hlist_unhashed(&mp->mglist))
hlist_del_init(&mp->mglist);
mp->mglist = false;

if (mp->ports)
goto out;
Expand Down Expand Up @@ -276,7 +275,7 @@ static void br_multicast_del_pg(struct net_bridge *br,
del_timer(&p->query_timer);
call_rcu_bh(&p->rcu, br_multicast_free_pg);

if (!mp->ports && hlist_unhashed(&mp->mglist) &&
if (!mp->ports && !mp->mglist &&
netif_running(br->dev))
mod_timer(&mp->timer, jiffies);

Expand Down Expand Up @@ -528,7 +527,7 @@ static void br_multicast_group_query_expired(unsigned long data)
struct net_bridge *br = mp->br;

spin_lock(&br->multicast_lock);
if (!netif_running(br->dev) || hlist_unhashed(&mp->mglist) ||
if (!netif_running(br->dev) || !mp->mglist ||
mp->queries_sent >= br->multicast_last_member_count)
goto out;

Expand Down Expand Up @@ -719,8 +718,7 @@ static int br_multicast_add_group(struct net_bridge *br,
goto err;

if (!port) {
if (hlist_unhashed(&mp->mglist))
hlist_add_head(&mp->mglist, &br->mglist);
mp->mglist = true;
mod_timer(&mp->timer, now + br->multicast_membership_interval);
goto out;
}
Expand Down Expand Up @@ -1166,7 +1164,7 @@ static int br_ip4_multicast_query(struct net_bridge *br,

max_delay *= br->multicast_last_member_count;

if (!hlist_unhashed(&mp->mglist) &&
if (mp->mglist &&
(timer_pending(&mp->timer) ?
time_after(mp->timer.expires, now + max_delay) :
try_to_del_timer_sync(&mp->timer) >= 0))
Expand Down Expand Up @@ -1237,7 +1235,7 @@ static int br_ip6_multicast_query(struct net_bridge *br,
goto out;

max_delay *= br->multicast_last_member_count;
if (!hlist_unhashed(&mp->mglist) &&
if (mp->mglist &&
(timer_pending(&mp->timer) ?
time_after(mp->timer.expires, now + max_delay) :
try_to_del_timer_sync(&mp->timer) >= 0))
Expand Down Expand Up @@ -1284,7 +1282,7 @@ static void br_multicast_leave_group(struct net_bridge *br,
br->multicast_last_member_interval;

if (!port) {
if (!hlist_unhashed(&mp->mglist) &&
if (mp->mglist &&
(timer_pending(&mp->timer) ?
time_after(mp->timer.expires, time) :
try_to_del_timer_sync(&mp->timer) >= 0)) {
Expand Down
3 changes: 1 addition & 2 deletions trunk/net/bridge/br_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,13 +84,13 @@ struct net_bridge_port_group {
struct net_bridge_mdb_entry
{
struct hlist_node hlist[2];
struct hlist_node mglist;
struct net_bridge *br;
struct net_bridge_port_group __rcu *ports;
struct rcu_head rcu;
struct timer_list timer;
struct timer_list query_timer;
struct br_ip addr;
bool mglist;
u32 queries_sent;
};

Expand Down Expand Up @@ -238,7 +238,6 @@ struct net_bridge
spinlock_t multicast_lock;
struct net_bridge_mdb_htable __rcu *mdb;
struct hlist_head router_list;
struct hlist_head mglist;

struct timer_list multicast_router_timer;
struct timer_list multicast_querier_timer;
Expand Down

0 comments on commit 015080d

Please sign in to comment.