Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: Documentation/feature-removal-schedule.txt drivers/net/e1000e/netdev.c net/xfrm/xfrm_policy.c
This commit is contained in:
@@ -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);
|
||||
|
@@ -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;
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -719,7 +718,7 @@ static int br_multicast_add_group(struct net_bridge *br,
|
||||
goto err;
|
||||
|
||||
if (!port) {
|
||||
hlist_add_head(&mp->mglist, &br->mglist);
|
||||
mp->mglist = true;
|
||||
mod_timer(&mp->timer, now + br->multicast_membership_interval);
|
||||
goto out;
|
||||
}
|
||||
@@ -1165,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))
|
||||
@@ -1177,7 +1176,7 @@ static int br_ip4_multicast_query(struct net_bridge *br,
|
||||
if (timer_pending(&p->timer) ?
|
||||
time_after(p->timer.expires, now + max_delay) :
|
||||
try_to_del_timer_sync(&p->timer) >= 0)
|
||||
mod_timer(&mp->timer, now + max_delay);
|
||||
mod_timer(&p->timer, now + max_delay);
|
||||
}
|
||||
|
||||
out:
|
||||
@@ -1236,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))
|
||||
@@ -1248,7 +1247,7 @@ static int br_ip6_multicast_query(struct net_bridge *br,
|
||||
if (timer_pending(&p->timer) ?
|
||||
time_after(p->timer.expires, now + max_delay) :
|
||||
try_to_del_timer_sync(&p->timer) >= 0)
|
||||
mod_timer(&mp->timer, now + max_delay);
|
||||
mod_timer(&p->timer, now + max_delay);
|
||||
}
|
||||
|
||||
out:
|
||||
@@ -1283,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)) {
|
||||
|
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
Reference in New Issue
Block a user