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: (52 commits) phylib: Add autoload support for the LXT973 phy. ISDN: hysdn, fix potential NULL dereference vxge: fix memory leak in vxge_alloc_msix() error path isdn/gigaset: correct CAPI connection state storage isdn/gigaset: encode HLC and BC together isdn/gigaset: correct CAPI DATA_B3 Delivery Confirmation isdn/gigaset: correct CAPI voice connection encoding isdn/gigaset: honor CAPI application's buffer size request cpmac: do not leak struct net_device on phy_connect errors smc91c92_cs: fix the problem that lan & modem does not work simultaneously ipv6: fix NULL reference in proxy neighbor discovery Bluetooth: Bring back var 'i' increment xfrm: check bundle policy existance before dereferencing it sky2: enable rx/tx in sky2_phy_reinit() cnic: Disable statistics initialization for eth clients that do not support statistics net: add dependency on fw class module to qlcnic and netxen_nic snmp: fix SNMP_ADD_STATS() hso: remove setting of low_latency flag udp: Fix bogus UFO packet generation lasi82596: fix netdev_mc_count conversion ...
This commit is contained in:
@@ -104,6 +104,8 @@ static void bnep_net_set_mc_list(struct net_device *dev)
|
||||
break;
|
||||
memcpy(__skb_put(skb, ETH_ALEN), ha->addr, ETH_ALEN);
|
||||
memcpy(__skb_put(skb, ETH_ALEN), ha->addr, ETH_ALEN);
|
||||
|
||||
i++;
|
||||
}
|
||||
r->len = htons(skb->len - len);
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ void br_fdb_cleanup(unsigned long _data)
|
||||
{
|
||||
struct net_bridge *br = (struct net_bridge *)_data;
|
||||
unsigned long delay = hold_time(br);
|
||||
unsigned long next_timer = jiffies + br->forward_delay;
|
||||
unsigned long next_timer = jiffies + br->ageing_time;
|
||||
int i;
|
||||
|
||||
spin_lock_bh(&br->hash_lock);
|
||||
@@ -149,9 +149,7 @@ void br_fdb_cleanup(unsigned long _data)
|
||||
}
|
||||
spin_unlock_bh(&br->hash_lock);
|
||||
|
||||
/* Add HZ/4 to ensure we round the jiffies upwards to be after the next
|
||||
* timer, otherwise we might round down and will have no-op run. */
|
||||
mod_timer(&br->gc_timer, round_jiffies(next_timer + HZ/4));
|
||||
mod_timer(&br->gc_timer, round_jiffies_up(next_timer));
|
||||
}
|
||||
|
||||
/* Completely flush all dynamic entries in forwarding database.*/
|
||||
|
||||
@@ -140,10 +140,10 @@ static int deliver_clone(const struct net_bridge_port *prev,
|
||||
void (*__packet_hook)(const struct net_bridge_port *p,
|
||||
struct sk_buff *skb))
|
||||
{
|
||||
struct net_device *dev = BR_INPUT_SKB_CB(skb)->brdev;
|
||||
|
||||
skb = skb_clone(skb, GFP_ATOMIC);
|
||||
if (!skb) {
|
||||
struct net_device *dev = BR_INPUT_SKB_CB(skb)->brdev;
|
||||
|
||||
dev->stats.tx_dropped++;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@@ -532,6 +532,7 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
|
||||
new->ip_summed = old->ip_summed;
|
||||
skb_copy_queue_mapping(new, old);
|
||||
new->priority = old->priority;
|
||||
new->deliver_no_wcard = old->deliver_no_wcard;
|
||||
#if defined(CONFIG_IP_VS) || defined(CONFIG_IP_VS_MODULE)
|
||||
new->ipvs_property = old->ipvs_property;
|
||||
#endif
|
||||
@@ -569,7 +570,6 @@ static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb)
|
||||
C(len);
|
||||
C(data_len);
|
||||
C(mac_len);
|
||||
C(rxhash);
|
||||
n->hdr_len = skb->nohdr ? skb_headroom(skb) : skb->hdr_len;
|
||||
n->cloned = 1;
|
||||
n->nohdr = 0;
|
||||
|
||||
@@ -873,8 +873,10 @@ int ip_append_data(struct sock *sk,
|
||||
!exthdrlen)
|
||||
csummode = CHECKSUM_PARTIAL;
|
||||
|
||||
skb = skb_peek_tail(&sk->sk_write_queue);
|
||||
|
||||
inet->cork.length += length;
|
||||
if (((length> mtu) || !skb_queue_empty(&sk->sk_write_queue)) &&
|
||||
if (((length > mtu) || (skb && skb_is_gso(skb))) &&
|
||||
(sk->sk_protocol == IPPROTO_UDP) &&
|
||||
(rt->u.dst.dev->features & NETIF_F_UFO)) {
|
||||
err = ip_ufo_append_data(sk, getfrag, from, length, hh_len,
|
||||
@@ -892,7 +894,7 @@ int ip_append_data(struct sock *sk,
|
||||
* adding appropriate IP header.
|
||||
*/
|
||||
|
||||
if ((skb = skb_peek_tail(&sk->sk_write_queue)) == NULL)
|
||||
if (!skb)
|
||||
goto alloc_new_skb;
|
||||
|
||||
while (length > 0) {
|
||||
@@ -1121,7 +1123,8 @@ ssize_t ip_append_page(struct sock *sk, struct page *page,
|
||||
return -EINVAL;
|
||||
|
||||
inet->cork.length += size;
|
||||
if ((sk->sk_protocol == IPPROTO_UDP) &&
|
||||
if ((size + skb->len > mtu) &&
|
||||
(sk->sk_protocol == IPPROTO_UDP) &&
|
||||
(rt->u.dst.dev->features & NETIF_F_UFO)) {
|
||||
skb_shinfo(skb)->gso_size = mtu - fragheaderlen;
|
||||
skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
|
||||
|
||||
@@ -586,6 +586,7 @@ static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
|
||||
src_addr = solicited_addr;
|
||||
if (ifp->flags & IFA_F_OPTIMISTIC)
|
||||
override = 0;
|
||||
inc_opt |= ifp->idev->cnf.force_tllao;
|
||||
in6_ifa_put(ifp);
|
||||
} else {
|
||||
if (ipv6_dev_get_saddr(dev_net(dev), dev, daddr,
|
||||
@@ -599,7 +600,6 @@ static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
|
||||
icmp6h.icmp6_solicited = solicited;
|
||||
icmp6h.icmp6_override = override;
|
||||
|
||||
inc_opt |= ifp->idev->cnf.force_tllao;
|
||||
__ndisc_send(dev, neigh, daddr, src_addr,
|
||||
&icmp6h, solicited_addr,
|
||||
inc_opt ? ND_OPT_TARGET_LL_ADDR : 0);
|
||||
|
||||
@@ -715,7 +715,7 @@ static void ieee80211_work_rx_queued_mgmt(struct ieee80211_local *local,
|
||||
struct ieee80211_rx_status *rx_status;
|
||||
struct ieee80211_mgmt *mgmt;
|
||||
struct ieee80211_work *wk;
|
||||
enum work_action rma;
|
||||
enum work_action rma = WORK_ACT_NONE;
|
||||
u16 fc;
|
||||
|
||||
rx_status = (struct ieee80211_rx_status *) skb->cb;
|
||||
|
||||
@@ -162,6 +162,7 @@ static inline int ip_vs_conn_hash(struct ip_vs_conn *cp)
|
||||
hash = ip_vs_conn_hashkey(cp->af, cp->protocol, &cp->caddr, cp->cport);
|
||||
|
||||
ct_write_lock(hash);
|
||||
spin_lock(&cp->lock);
|
||||
|
||||
if (!(cp->flags & IP_VS_CONN_F_HASHED)) {
|
||||
list_add(&cp->c_list, &ip_vs_conn_tab[hash]);
|
||||
@@ -174,6 +175,7 @@ static inline int ip_vs_conn_hash(struct ip_vs_conn *cp)
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
spin_unlock(&cp->lock);
|
||||
ct_write_unlock(hash);
|
||||
|
||||
return ret;
|
||||
@@ -193,6 +195,7 @@ static inline int ip_vs_conn_unhash(struct ip_vs_conn *cp)
|
||||
hash = ip_vs_conn_hashkey(cp->af, cp->protocol, &cp->caddr, cp->cport);
|
||||
|
||||
ct_write_lock(hash);
|
||||
spin_lock(&cp->lock);
|
||||
|
||||
if (cp->flags & IP_VS_CONN_F_HASHED) {
|
||||
list_del(&cp->c_list);
|
||||
@@ -202,6 +205,7 @@ static inline int ip_vs_conn_unhash(struct ip_vs_conn *cp)
|
||||
} else
|
||||
ret = 0;
|
||||
|
||||
spin_unlock(&cp->lock);
|
||||
ct_write_unlock(hash);
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -449,6 +449,7 @@ static __init void teql_master_setup(struct net_device *dev)
|
||||
dev->tx_queue_len = 100;
|
||||
dev->flags = IFF_NOARP;
|
||||
dev->hard_header_len = LL_MAX_HEADER;
|
||||
dev->priv_flags &= ~IFF_XMIT_DST_RELEASE;
|
||||
}
|
||||
|
||||
static LIST_HEAD(master_dev_list);
|
||||
|
||||
@@ -2300,7 +2300,8 @@ int xfrm_bundle_ok(struct xfrm_policy *pol, struct xfrm_dst *first,
|
||||
return 0;
|
||||
if (xdst->xfrm_genid != dst->xfrm->genid)
|
||||
return 0;
|
||||
if (xdst->policy_genid != atomic_read(&xdst->pols[0]->genid))
|
||||
if (xdst->num_pols > 0 &&
|
||||
xdst->policy_genid != atomic_read(&xdst->pols[0]->genid))
|
||||
return 0;
|
||||
|
||||
if (strict && fl &&
|
||||
|
||||
Reference in New Issue
Block a user