diff options
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r-- | net/ipv4/tcp_output.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index e2c1333ee318..3d609490f118 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -160,6 +160,7 @@ static void tcp_event_data_sent(struct tcp_sock *tp, | |||
160 | { | 160 | { |
161 | struct inet_connection_sock *icsk = inet_csk(sk); | 161 | struct inet_connection_sock *icsk = inet_csk(sk); |
162 | const u32 now = tcp_time_stamp; | 162 | const u32 now = tcp_time_stamp; |
163 | const struct dst_entry *dst = __sk_dst_get(sk); | ||
163 | 164 | ||
164 | if (sysctl_tcp_slow_start_after_idle && | 165 | if (sysctl_tcp_slow_start_after_idle && |
165 | (!tp->packets_out && (s32)(now - tp->lsndtime) > icsk->icsk_rto)) | 166 | (!tp->packets_out && (s32)(now - tp->lsndtime) > icsk->icsk_rto)) |
@@ -170,8 +171,9 @@ static void tcp_event_data_sent(struct tcp_sock *tp, | |||
170 | /* If it is a reply for ato after last received | 171 | /* If it is a reply for ato after last received |
171 | * packet, enter pingpong mode. | 172 | * packet, enter pingpong mode. |
172 | */ | 173 | */ |
173 | if ((u32)(now - icsk->icsk_ack.lrcvtime) < icsk->icsk_ack.ato) | 174 | if ((u32)(now - icsk->icsk_ack.lrcvtime) < icsk->icsk_ack.ato && |
174 | icsk->icsk_ack.pingpong = 1; | 175 | (!dst || !dst_metric(dst, RTAX_QUICKACK))) |
176 | icsk->icsk_ack.pingpong = 1; | ||
175 | } | 177 | } |
176 | 178 | ||
177 | /* Account for an ACK we sent. */ | 179 | /* Account for an ACK we sent. */ |