mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (108 commits)
bridge: ensure to unlock in error path in br_multicast_query().
drivers/net/tulip/eeprom.c: fix bogus "(null)" in tulip init messages
sky2: Avoid rtnl_unlock without rtnl_lock
ipv6: Send netlink notification when DAD fails
drivers/net/tg3.c: change the field used with the TG3_FLAG_10_100_ONLY constant
ipconfig: Handle devices which take some time to come up.
mac80211: Fix memory leak in ieee80211_if_write()
mac80211: Fix (dynamic) power save entry
ipw2200: use kmalloc for large local variables
ath5k: read eeprom IQ calibration values correctly for G mode
ath5k: fix I/Q calibration (for real)
ath5k: fix TSF reset
ath5k: use fixed antenna for tx descriptors
libipw: split ieee->networks into small pieces
mac80211: Fix sta_mtx unlocking on insert STA failure path
rt2x00: remove KSEG1ADDR define from rt2x00soc.h
net: add ColdFire support to the smc91x driver
asix: fix setting mac address for AX88772
ipv6 ip6_tunnel: eliminate unused recursion field from ip6_tnl{}.
net: Fix dev_mc_add()
...
This commit is contained in:
commit
d89b218b80
114 changed files with 1298 additions and 23810 deletions
|
|
@ -35,6 +35,7 @@ config BRIDGE
|
|||
config BRIDGE_IGMP_SNOOPING
|
||||
bool "IGMP snooping"
|
||||
depends on BRIDGE
|
||||
depends on INET
|
||||
default y
|
||||
---help---
|
||||
If you say Y here, then the Ethernet bridge will be able selectively
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ static struct net_bridge_mdb_entry *__br_mdb_ip_get(
|
|||
struct net_bridge_mdb_entry *mp;
|
||||
struct hlist_node *p;
|
||||
|
||||
hlist_for_each_entry(mp, p, &mdb->mhash[hash], hlist[mdb->ver]) {
|
||||
hlist_for_each_entry_rcu(mp, p, &mdb->mhash[hash], hlist[mdb->ver]) {
|
||||
if (dst == mp->addr)
|
||||
return mp;
|
||||
}
|
||||
|
|
@ -627,8 +627,8 @@ static void br_multicast_port_query_expired(unsigned long data)
|
|||
struct net_bridge *br = port->br;
|
||||
|
||||
spin_lock(&br->multicast_lock);
|
||||
if (port && (port->state == BR_STATE_DISABLED ||
|
||||
port->state == BR_STATE_BLOCKING))
|
||||
if (port->state == BR_STATE_DISABLED ||
|
||||
port->state == BR_STATE_BLOCKING)
|
||||
goto out;
|
||||
|
||||
if (port->multicast_startup_queries_sent <
|
||||
|
|
@ -823,6 +823,7 @@ static int br_multicast_query(struct net_bridge *br,
|
|||
unsigned long max_delay;
|
||||
unsigned long now = jiffies;
|
||||
__be32 group;
|
||||
int err = 0;
|
||||
|
||||
spin_lock(&br->multicast_lock);
|
||||
if (!netif_running(br->dev) ||
|
||||
|
|
@ -841,12 +842,14 @@ static int br_multicast_query(struct net_bridge *br,
|
|||
group = 0;
|
||||
}
|
||||
} else {
|
||||
if (!pskb_may_pull(skb, sizeof(struct igmpv3_query)))
|
||||
return -EINVAL;
|
||||
if (!pskb_may_pull(skb, sizeof(struct igmpv3_query))) {
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ih3 = igmpv3_query_hdr(skb);
|
||||
if (ih3->nsrcs)
|
||||
return 0;
|
||||
goto out;
|
||||
|
||||
max_delay = ih3->code ? 1 :
|
||||
IGMPV3_MRC(ih3->code) * (HZ / IGMP_TIMER_SCALE);
|
||||
|
|
@ -876,7 +879,7 @@ static int br_multicast_query(struct net_bridge *br,
|
|||
|
||||
out:
|
||||
spin_unlock(&br->multicast_lock);
|
||||
return 0;
|
||||
return err;
|
||||
}
|
||||
|
||||
static void br_multicast_leave_group(struct net_bridge *br,
|
||||
|
|
@ -1135,7 +1138,7 @@ void br_multicast_stop(struct net_bridge *br)
|
|||
|
||||
if (mdb->old) {
|
||||
spin_unlock_bh(&br->multicast_lock);
|
||||
synchronize_rcu_bh();
|
||||
rcu_barrier_bh();
|
||||
spin_lock_bh(&br->multicast_lock);
|
||||
WARN_ON(mdb->old);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue