aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_output.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/tcp_output.c')
-rw-r--r--net/ipv4/tcp_output.c6
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. */