diff options
author | Takashi Iwai <tiwai@suse.de> | 2018-07-18 17:42:34 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2018-07-18 17:42:40 +0200 |
commit | 67ece13ffe862f9d17a144c6cd3feef88a57db13 (patch) | |
tree | ec2036681d19a9c10b2fad941eb8f58f9eafcfc8 /net/ipv4/tcp_input.c | |
parent | fa84cf094ef9667e2b91c104b0a788fd1896f482 (diff) | |
parent | 4aaf448fa9754e2d5ee188d32327b24ffc15ca4d (diff) |
Merge branch 'topic/vga_switcheroo' into for-next
Pull the vga_switcheroo audio client fix.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r-- | net/ipv4/tcp_input.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 355d3dffd021c..8e5522c6833ad 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -265,7 +265,7 @@ static void __tcp_ecn_check_ce(struct sock *sk, const struct sk_buff *skb) * it is probably a retransmit. */ if (tp->ecn_flags & TCP_ECN_SEEN) - tcp_enter_quickack_mode(sk, 1); + tcp_enter_quickack_mode(sk, 2); break; case INET_ECN_CE: if (tcp_ca_needs_ecn(sk)) @@ -273,7 +273,7 @@ static void __tcp_ecn_check_ce(struct sock *sk, const struct sk_buff *skb) if (!(tp->ecn_flags & TCP_ECN_DEMAND_CWR)) { /* Better not delay acks, sender can have a very low cwnd */ - tcp_enter_quickack_mode(sk, 1); + tcp_enter_quickack_mode(sk, 2); tp->ecn_flags |= TCP_ECN_DEMAND_CWR; } tp->ecn_flags |= TCP_ECN_SEEN; @@ -3181,6 +3181,15 @@ static int tcp_clean_rtx_queue(struct sock *sk, u32 prior_fack, if (tcp_is_reno(tp)) { tcp_remove_reno_sacks(sk, pkts_acked); + + /* If any of the cumulatively ACKed segments was + * retransmitted, non-SACK case cannot confirm that + * progress was due to original transmission due to + * lack of TCPCB_SACKED_ACKED bits even if some of + * the packets may have been never retransmitted. + */ + if (flag & FLAG_RETRANS_DATA_ACKED) + flag &= ~FLAG_ORIG_SACK_ACKED; } else { int delta; |