diff options
author | David S. Miller <davem@davemloft.net> | 2009-04-21 04:32:26 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-04-21 04:32:26 -0400 |
commit | e5e9743bb7429f53c83ad69b432f7b661e74c3f0 (patch) | |
tree | db3691aef0d46c4aed4a2be6dc8ab7c44c3488cb /net/ipv4 | |
parent | a0f82f64e26929776c58a5c93c2ecb38e3d82815 (diff) | |
parent | 775d8d931581764a1ec982ebe5a927b12762fb6d (diff) |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
net/core/dev.c
Diffstat (limited to 'net/ipv4')
-rw-r--r-- | net/ipv4/tcp.c | 6 | ||||
-rw-r--r-- | net/ipv4/tcp_output.c | 2 |
2 files changed, 5 insertions, 3 deletions
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index fafbec8b073e..1d7f49c6f0ca 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -2511,6 +2511,7 @@ struct sk_buff **tcp_gro_receive(struct sk_buff **head, struct sk_buff *skb) | |||
2511 | struct sk_buff *p; | 2511 | struct sk_buff *p; |
2512 | struct tcphdr *th; | 2512 | struct tcphdr *th; |
2513 | struct tcphdr *th2; | 2513 | struct tcphdr *th2; |
2514 | unsigned int len; | ||
2514 | unsigned int thlen; | 2515 | unsigned int thlen; |
2515 | unsigned int flags; | 2516 | unsigned int flags; |
2516 | unsigned int mss = 1; | 2517 | unsigned int mss = 1; |
@@ -2531,6 +2532,7 @@ struct sk_buff **tcp_gro_receive(struct sk_buff **head, struct sk_buff *skb) | |||
2531 | 2532 | ||
2532 | skb_gro_pull(skb, thlen); | 2533 | skb_gro_pull(skb, thlen); |
2533 | 2534 | ||
2535 | len = skb_gro_len(skb); | ||
2534 | flags = tcp_flag_word(th); | 2536 | flags = tcp_flag_word(th); |
2535 | 2537 | ||
2536 | for (; (p = *head); head = &p->next) { | 2538 | for (; (p = *head); head = &p->next) { |
@@ -2561,7 +2563,7 @@ found: | |||
2561 | 2563 | ||
2562 | mss = skb_shinfo(p)->gso_size; | 2564 | mss = skb_shinfo(p)->gso_size; |
2563 | 2565 | ||
2564 | flush |= (skb_gro_len(skb) > mss) | !skb_gro_len(skb); | 2566 | flush |= (len > mss) | !len; |
2565 | flush |= (ntohl(th2->seq) + skb_gro_len(p)) ^ ntohl(th->seq); | 2567 | flush |= (ntohl(th2->seq) + skb_gro_len(p)) ^ ntohl(th->seq); |
2566 | 2568 | ||
2567 | if (flush || skb_gro_receive(head, skb)) { | 2569 | if (flush || skb_gro_receive(head, skb)) { |
@@ -2574,7 +2576,7 @@ found: | |||
2574 | tcp_flag_word(th2) |= flags & (TCP_FLAG_FIN | TCP_FLAG_PSH); | 2576 | tcp_flag_word(th2) |= flags & (TCP_FLAG_FIN | TCP_FLAG_PSH); |
2575 | 2577 | ||
2576 | out_check_final: | 2578 | out_check_final: |
2577 | flush = skb_gro_len(skb) < mss; | 2579 | flush = len < mss; |
2578 | flush |= flags & (TCP_FLAG_URG | TCP_FLAG_PSH | TCP_FLAG_RST | | 2580 | flush |= flags & (TCP_FLAG_URG | TCP_FLAG_PSH | TCP_FLAG_RST | |
2579 | TCP_FLAG_SYN | TCP_FLAG_FIN); | 2581 | TCP_FLAG_SYN | TCP_FLAG_FIN); |
2580 | 2582 | ||
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 53300fa2359f..59aec609cec6 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -778,7 +778,7 @@ static void tcp_adjust_pcount(struct sock *sk, struct sk_buff *skb, int decr) | |||
778 | 778 | ||
779 | if (tp->lost_skb_hint && | 779 | if (tp->lost_skb_hint && |
780 | before(TCP_SKB_CB(skb)->seq, TCP_SKB_CB(tp->lost_skb_hint)->seq) && | 780 | before(TCP_SKB_CB(skb)->seq, TCP_SKB_CB(tp->lost_skb_hint)->seq) && |
781 | (tcp_is_fack(tp) || TCP_SKB_CB(skb)->sacked)) | 781 | (tcp_is_fack(tp) || (TCP_SKB_CB(skb)->sacked & TCPCB_SACKED_ACKED))) |
782 | tp->lost_cnt_hint -= decr; | 782 | tp->lost_cnt_hint -= decr; |
783 | 783 | ||
784 | tcp_verify_left_out(tp); | 784 | tcp_verify_left_out(tp); |