mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 10:14:23 +08:00
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
This commit is contained in:
commit
a36f496195
@ -1743,8 +1743,11 @@ S: Maintained
|
|||||||
IPVS
|
IPVS
|
||||||
P: Wensong Zhang
|
P: Wensong Zhang
|
||||||
M: wensong@linux-vs.org
|
M: wensong@linux-vs.org
|
||||||
|
P: Simon Horman
|
||||||
|
M: horms@verge.net.au
|
||||||
P: Julian Anastasov
|
P: Julian Anastasov
|
||||||
M: ja@ssi.bg
|
M: ja@ssi.bg
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
NFS CLIENT
|
NFS CLIENT
|
||||||
|
@ -686,9 +686,19 @@ static unsigned char lec_ctrl_magic[] = {
|
|||||||
0x01,
|
0x01,
|
||||||
0x01 };
|
0x01 };
|
||||||
|
|
||||||
|
#define LEC_DATA_DIRECT_8023 2
|
||||||
|
#define LEC_DATA_DIRECT_8025 3
|
||||||
|
|
||||||
|
static int lec_is_data_direct(struct atm_vcc *vcc)
|
||||||
|
{
|
||||||
|
return ((vcc->sap.blli[0].l3.tr9577.snap[4] == LEC_DATA_DIRECT_8023) ||
|
||||||
|
(vcc->sap.blli[0].l3.tr9577.snap[4] == LEC_DATA_DIRECT_8025));
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
lec_push(struct atm_vcc *vcc, struct sk_buff *skb)
|
lec_push(struct atm_vcc *vcc, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
|
unsigned long flags;
|
||||||
struct net_device *dev = (struct net_device *)vcc->proto_data;
|
struct net_device *dev = (struct net_device *)vcc->proto_data;
|
||||||
struct lec_priv *priv = (struct lec_priv *)dev->priv;
|
struct lec_priv *priv = (struct lec_priv *)dev->priv;
|
||||||
|
|
||||||
@ -728,7 +738,8 @@ lec_push(struct atm_vcc *vcc, struct sk_buff *skb)
|
|||||||
skb_queue_tail(&sk->sk_receive_queue, skb);
|
skb_queue_tail(&sk->sk_receive_queue, skb);
|
||||||
sk->sk_data_ready(sk, skb->len);
|
sk->sk_data_ready(sk, skb->len);
|
||||||
} else { /* Data frame, queue to protocol handlers */
|
} else { /* Data frame, queue to protocol handlers */
|
||||||
unsigned char *dst;
|
struct lec_arp_table *entry;
|
||||||
|
unsigned char *src, *dst;
|
||||||
|
|
||||||
atm_return(vcc,skb->truesize);
|
atm_return(vcc,skb->truesize);
|
||||||
if (*(uint16_t *)skb->data == htons(priv->lecid) ||
|
if (*(uint16_t *)skb->data == htons(priv->lecid) ||
|
||||||
@ -741,10 +752,30 @@ lec_push(struct atm_vcc *vcc, struct sk_buff *skb)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_TR
|
#ifdef CONFIG_TR
|
||||||
if (priv->is_trdev) dst = ((struct lecdatahdr_8025 *)skb->data)->h_dest;
|
if (priv->is_trdev)
|
||||||
|
dst = ((struct lecdatahdr_8025 *) skb->data)->h_dest;
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
dst = ((struct lecdatahdr_8023 *)skb->data)->h_dest;
|
dst = ((struct lecdatahdr_8023 *) skb->data)->h_dest;
|
||||||
|
|
||||||
|
/* If this is a Data Direct VCC, and the VCC does not match
|
||||||
|
* the LE_ARP cache entry, delete the LE_ARP cache entry.
|
||||||
|
*/
|
||||||
|
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||||
|
if (lec_is_data_direct(vcc)) {
|
||||||
|
#ifdef CONFIG_TR
|
||||||
|
if (priv->is_trdev)
|
||||||
|
src = ((struct lecdatahdr_8025 *) skb->data)->h_source;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
src = ((struct lecdatahdr_8023 *) skb->data)->h_source;
|
||||||
|
entry = lec_arp_find(priv, src);
|
||||||
|
if (entry && entry->vcc != vcc) {
|
||||||
|
lec_arp_remove(priv, entry);
|
||||||
|
kfree(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
|
||||||
|
|
||||||
if (!(dst[0]&0x01) && /* Never filter Multi/Broadcast */
|
if (!(dst[0]&0x01) && /* Never filter Multi/Broadcast */
|
||||||
!priv->is_proxy && /* Proxy wants all the packets */
|
!priv->is_proxy && /* Proxy wants all the packets */
|
||||||
@ -1990,6 +2021,12 @@ lec_arp_resolve(struct lec_priv *priv, unsigned char *mac_to_find,
|
|||||||
found = entry->vcc;
|
found = entry->vcc;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
/* If the LE_ARP cache entry is still pending, reset count to 0
|
||||||
|
* so another LE_ARP request can be made for this frame.
|
||||||
|
*/
|
||||||
|
if (entry->status == ESI_ARP_PENDING) {
|
||||||
|
entry->no_tries = 0;
|
||||||
|
}
|
||||||
/* Data direct VC not yet set up, check to see if the unknown
|
/* Data direct VC not yet set up, check to see if the unknown
|
||||||
frame count is greater than the limit. If the limit has
|
frame count is greater than the limit. If the limit has
|
||||||
not been reached, allow the caller to send packet to
|
not been reached, allow the caller to send packet to
|
||||||
|
@ -355,8 +355,6 @@ static void tcp_clamp_window(struct sock *sk, struct tcp_sock *tp)
|
|||||||
app_win -= icsk->icsk_ack.rcv_mss;
|
app_win -= icsk->icsk_ack.rcv_mss;
|
||||||
app_win = max(app_win, 2U*tp->advmss);
|
app_win = max(app_win, 2U*tp->advmss);
|
||||||
|
|
||||||
if (!ofo_win)
|
|
||||||
tp->window_clamp = min(tp->window_clamp, app_win);
|
|
||||||
tp->rcv_ssthresh = min(tp->window_clamp, 2U*tp->advmss);
|
tp->rcv_ssthresh = min(tp->window_clamp, 2U*tp->advmss);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -194,12 +194,11 @@ void tcp_select_initial_window(int __space, __u32 mss,
|
|||||||
* will be satisfied with 2.
|
* will be satisfied with 2.
|
||||||
*/
|
*/
|
||||||
if (mss > (1<<*rcv_wscale)) {
|
if (mss > (1<<*rcv_wscale)) {
|
||||||
int init_cwnd;
|
int init_cwnd = 4;
|
||||||
|
if (mss > 1460*3)
|
||||||
if (mss > 1460)
|
|
||||||
init_cwnd = 2;
|
init_cwnd = 2;
|
||||||
else
|
else if (mss > 1460)
|
||||||
init_cwnd = (mss > 1095) ? 3 : 4;
|
init_cwnd = 3;
|
||||||
if (*rcv_wnd > init_cwnd*mss)
|
if (*rcv_wnd > init_cwnd*mss)
|
||||||
*rcv_wnd = init_cwnd*mss;
|
*rcv_wnd = init_cwnd*mss;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user