aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_input.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/tcp_input.c')
-rw-r--r--net/ipv4/tcp_input.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 9f4380662196..4ea8ec5c7bb4 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -2921,9 +2921,9 @@ static void tcp_update_rtt_min(struct sock *sk, u32 rtt_us)
2921 rtt_us ? : jiffies_to_usecs(1)); 2921 rtt_us ? : jiffies_to_usecs(1));
2922} 2922}
2923 2923
2924static inline bool tcp_ack_update_rtt(struct sock *sk, const int flag, 2924static bool tcp_ack_update_rtt(struct sock *sk, const int flag,
2925 long seq_rtt_us, long sack_rtt_us, 2925 long seq_rtt_us, long sack_rtt_us,
2926 long ca_rtt_us) 2926 long ca_rtt_us, struct rate_sample *rs)
2927{ 2927{
2928 const struct tcp_sock *tp = tcp_sk(sk); 2928 const struct tcp_sock *tp = tcp_sk(sk);
2929 2929
@@ -2948,6 +2948,7 @@ static inline bool tcp_ack_update_rtt(struct sock *sk, const int flag,
2948 2948
2949 seq_rtt_us = ca_rtt_us = delta_us; 2949 seq_rtt_us = ca_rtt_us = delta_us;
2950 } 2950 }
2951 rs->rtt_us = ca_rtt_us; /* RTT of last (S)ACKed packet (or -1) */
2951 if (seq_rtt_us < 0) 2952 if (seq_rtt_us < 0)
2952 return false; 2953 return false;
2953 2954
@@ -2967,12 +2968,13 @@ static inline bool tcp_ack_update_rtt(struct sock *sk, const int flag,
2967/* Compute time elapsed between (last) SYNACK and the ACK completing 3WHS. */ 2968/* Compute time elapsed between (last) SYNACK and the ACK completing 3WHS. */
2968void tcp_synack_rtt_meas(struct sock *sk, struct request_sock *req) 2969void tcp_synack_rtt_meas(struct sock *sk, struct request_sock *req)
2969{ 2970{
2971 struct rate_sample rs;
2970 long rtt_us = -1L; 2972 long rtt_us = -1L;
2971 2973
2972 if (req && !req->num_retrans && tcp_rsk(req)->snt_synack) 2974 if (req && !req->num_retrans && tcp_rsk(req)->snt_synack)
2973 rtt_us = tcp_stamp_us_delta(tcp_clock_us(), tcp_rsk(req)->snt_synack); 2975 rtt_us = tcp_stamp_us_delta(tcp_clock_us(), tcp_rsk(req)->snt_synack);
2974 2976
2975 tcp_ack_update_rtt(sk, FLAG_SYN_ACKED, rtt_us, -1L, rtt_us); 2977 tcp_ack_update_rtt(sk, FLAG_SYN_ACKED, rtt_us, -1L, rtt_us, &rs);
2976} 2978}
2977 2979
2978 2980
@@ -3177,9 +3179,8 @@ static int tcp_clean_rtx_queue(struct sock *sk, int prior_fackets,
3177 sack_rtt_us = tcp_stamp_us_delta(tp->tcp_mstamp, sack->first_sackt); 3179 sack_rtt_us = tcp_stamp_us_delta(tp->tcp_mstamp, sack->first_sackt);
3178 ca_rtt_us = tcp_stamp_us_delta(tp->tcp_mstamp, sack->last_sackt); 3180 ca_rtt_us = tcp_stamp_us_delta(tp->tcp_mstamp, sack->last_sackt);
3179 } 3181 }
3180 sack->rate->rtt_us = ca_rtt_us; /* RTT of last (S)ACKed packet, or -1 */
3181 rtt_update = tcp_ack_update_rtt(sk, flag, seq_rtt_us, sack_rtt_us, 3182 rtt_update = tcp_ack_update_rtt(sk, flag, seq_rtt_us, sack_rtt_us,
3182 ca_rtt_us); 3183 ca_rtt_us, sack->rate);
3183 3184
3184 if (flag & FLAG_ACKED) { 3185 if (flag & FLAG_ACKED) {
3185 tcp_rearm_rto(sk); 3186 tcp_rearm_rto(sk);
@@ -3215,7 +3216,7 @@ static int tcp_clean_rtx_queue(struct sock *sk, int prior_fackets,
3215 3216
3216 if (icsk->icsk_ca_ops->pkts_acked) { 3217 if (icsk->icsk_ca_ops->pkts_acked) {
3217 struct ack_sample sample = { .pkts_acked = pkts_acked, 3218 struct ack_sample sample = { .pkts_acked = pkts_acked,
3218 .rtt_us = ca_rtt_us, 3219 .rtt_us = sack->rate->rtt_us,
3219 .in_flight = last_in_flight }; 3220 .in_flight = last_in_flight };
3220 3221
3221 icsk->icsk_ca_ops->pkts_acked(sk, &sample); 3222 icsk->icsk_ca_ops->pkts_acked(sk, &sample);