diff options
author | Florian Westphal <fw@strlen.de> | 2017-08-30 13:24:57 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-08-30 14:20:08 -0400 |
commit | c1d2b4c3e204e602c97680335d082b8d012d08cd (patch) | |
tree | 13e414720a46cb979474a4145fea09452f0c7e60 /net/ipv4/tcp_input.c | |
parent | 0da93d2ebb5d198a4601bd5ad7695f3c6fd36062 (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.c | 35 |
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... |