diff options
author | Eric Dumazet <edumazet@google.com> | 2018-06-20 16:07:35 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-06-22 00:59:22 -0400 |
commit | cadefe5f584abaac40dce72009e4de738cbff467 (patch) | |
tree | 1b40f040d84e576d231826bd19593918eb597d86 /net/ipv4/tcp_output.c | |
parent | 3f484a6e766740c9cb89cf576fdceeec49e221fd (diff) |
tcp_bbr: fix bbr pacing rate for internal pacing
This commit makes BBR use only the MSS (without any headers) to
calculate pacing rates when internal TCP-layer pacing is used.
This is necessary to achieve the correct pacing behavior in this case,
since tcp_internal_pacing() uses only the payload length to calculate
pacing delays.
Signed-off-by: Kevin Yang <yyd@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Neal Cardwell <ncardwell@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r-- | net/ipv4/tcp_output.c | 14 |
1 files changed, 0 insertions, 14 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 8e08b409c71e..f8f6129160dd 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -973,17 +973,6 @@ enum hrtimer_restart tcp_pace_kick(struct hrtimer *timer) | |||
973 | return HRTIMER_NORESTART; | 973 | return HRTIMER_NORESTART; |
974 | } | 974 | } |
975 | 975 | ||
976 | /* BBR congestion control needs pacing. | ||
977 | * Same remark for SO_MAX_PACING_RATE. | ||
978 | * sch_fq packet scheduler is efficiently handling pacing, | ||
979 | * but is not always installed/used. | ||
980 | * Return true if TCP stack should pace packets itself. | ||
981 | */ | ||
982 | static bool tcp_needs_internal_pacing(const struct sock *sk) | ||
983 | { | ||
984 | return smp_load_acquire(&sk->sk_pacing_status) == SK_PACING_NEEDED; | ||
985 | } | ||
986 | |||
987 | static void tcp_internal_pacing(struct sock *sk, const struct sk_buff *skb) | 976 | static void tcp_internal_pacing(struct sock *sk, const struct sk_buff *skb) |
988 | { | 977 | { |
989 | u64 len_ns; | 978 | u64 len_ns; |
@@ -995,9 +984,6 @@ static void tcp_internal_pacing(struct sock *sk, const struct sk_buff *skb) | |||
995 | if (!rate || rate == ~0U) | 984 | if (!rate || rate == ~0U) |
996 | return; | 985 | return; |
997 | 986 | ||
998 | /* Should account for header sizes as sch_fq does, | ||
999 | * but lets make things simple. | ||
1000 | */ | ||
1001 | len_ns = (u64)skb->len * NSEC_PER_SEC; | 987 | len_ns = (u64)skb->len * NSEC_PER_SEC; |
1002 | do_div(len_ns, rate); | 988 | do_div(len_ns, rate); |
1003 | hrtimer_start(&tcp_sk(sk)->pacing_timer, | 989 | hrtimer_start(&tcp_sk(sk)->pacing_timer, |