aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_input.c
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2017-08-30 13:24:57 -0400
committerDavid S. Miller <davem@davemloft.net>2017-08-30 14:20:08 -0400
commitc1d2b4c3e204e602c97680335d082b8d012d08cd (patch)
tree13e414720a46cb979474a4145fea09452f0c7e60 /net/ipv4/tcp_input.c
parent0da93d2ebb5d198a4601bd5ad7695f3c6fd36062 (diff)
tcp: Revert "tcp: remove CA_ACK_SLOWPATH"
This change was a followup to the header prediction removal, so first revert this as a prerequisite to back out hp removal. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r--net/ipv4/tcp_input.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 7616cd76f6f6..a0e436366d31 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -3552,7 +3552,6 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
3552 u32 lost = tp->lost; 3552 u32 lost = tp->lost;
3553 int acked = 0; /* Number of packets newly acked */ 3553 int acked = 0; /* Number of packets newly acked */
3554 int rexmit = REXMIT_NONE; /* Flag to (re)transmit to recover losses */ 3554 int rexmit = REXMIT_NONE; /* Flag to (re)transmit to recover losses */
3555 u32 ack_ev_flags = 0;
3556 3555
3557 sack_state.first_sackt = 0; 3556 sack_state.first_sackt = 0;
3558 sack_state.rate = &rs; 3557 sack_state.rate = &rs;
@@ -3593,26 +3592,30 @@ static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag)
3593 if (flag & FLAG_UPDATE_TS_RECENT) 3592 if (flag & FLAG_UPDATE_TS_RECENT)
3594 tcp_replace_ts_recent(tp, TCP_SKB_CB(skb)->seq); 3593 tcp_replace_ts_recent(tp, TCP_SKB_CB(skb)->seq);
3595 3594
3596 if (ack_seq != TCP_SKB_CB(skb)->end_seq) 3595 {
3597 flag |= FLAG_DATA; 3596 u32 ack_ev_flags = CA_ACK_SLOWPATH;
3598 else
3599 NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPPUREACKS);
3600 3597
3601 flag |= tcp_ack_update_window(sk, skb, ack, ack_seq); 3598 if (ack_seq != TCP_SKB_CB(skb)->end_seq)
3599 flag |= FLAG_DATA;
3600 else
3601 NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPPUREACKS);
3602 3602
3603 if (TCP_SKB_CB(skb)->sacked) 3603 flag |= tcp_ack_update_window(sk, skb, ack, ack_seq);
3604 flag |= tcp_sacktag_write_queue(sk, skb, prior_snd_una,
3605 &sack_state);
3606 3604
3607 if (tcp_ecn_rcv_ecn_echo(tp, tcp_hdr(skb))) { 3605 if (TCP_SKB_CB(skb)->sacked)
3608 flag |= FLAG_ECE; 3606 flag |= tcp_sacktag_write_queue(sk, skb, prior_snd_una,
3609 ack_ev_flags = CA_ACK_ECE; 3607 &sack_state);
3610 } 3608
3609 if (tcp_ecn_rcv_ecn_echo(tp, tcp_hdr(skb))) {
3610 flag |= FLAG_ECE;
3611 ack_ev_flags |= CA_ACK_ECE;
3612 }
3611 3613
3612 if (flag & FLAG_WIN_UPDATE) 3614 if (flag & FLAG_WIN_UPDATE)
3613 ack_ev_flags |= CA_ACK_WIN_UPDATE; 3615 ack_ev_flags |= CA_ACK_WIN_UPDATE;
3614 3616
3615 tcp_in_ack_event(sk, ack_ev_flags); 3617 tcp_in_ack_event(sk, ack_ev_flags);
3618 }
3616 3619
3617 /* We passed data and got it acked, remove any soft error 3620 /* We passed data and got it acked, remove any soft error
3618 * log. Something worked... 3621 * log. Something worked...