Lines Matching +full:max +full:- +full:retries

1 // SPDX-License-Identifier: GPL-2.0-only
12 * Corey Minyard <wf-[email protected]>
13 * Florian La Roche, <[email protected]-sb.de>
34 user_timeout = READ_ONCE(icsk->icsk_user_timeout); in tcp_clamp_rto_to_user_timeout()
36 return icsk->icsk_rto; in tcp_clamp_rto_to_user_timeout()
38 elapsed = tcp_time_stamp_ts(tp) - tp->retrans_stamp; in tcp_clamp_rto_to_user_timeout()
39 if (tp->tcp_usec_ts) in tcp_clamp_rto_to_user_timeout()
42 remaining = user_timeout - elapsed; in tcp_clamp_rto_to_user_timeout()
46 return min_t(u32, icsk->icsk_rto, msecs_to_jiffies(remaining)); in tcp_clamp_rto_to_user_timeout()
55 user_timeout = READ_ONCE(icsk->icsk_user_timeout); in tcp_clamp_probe0_to_user_timeout()
56 if (!user_timeout || !icsk->icsk_probes_tstamp) in tcp_clamp_probe0_to_user_timeout()
59 elapsed = tcp_jiffies32 - icsk->icsk_probes_tstamp; in tcp_clamp_probe0_to_user_timeout()
62 remaining = msecs_to_jiffies(user_timeout) - elapsed; in tcp_clamp_probe0_to_user_timeout()
69 * tcp_write_err() - close socket and save error info
77 tcp_done_with_error(sk, READ_ONCE(sk->sk_err_soft) ? : ETIMEDOUT); in tcp_write_err()
82 * tcp_out_of_resources() - Close socket if out of resources
112 if ((s32)(tcp_jiffies32 - tp->lsndtime) > 2*TCP_RTO_MAX || !do_reset) in tcp_out_of_resources()
116 if (READ_ONCE(sk->sk_err_soft)) in tcp_out_of_resources()
122 if ((s32)(tcp_jiffies32 - tp->lsndtime) <= TCP_TIMEWAIT_LEN || in tcp_out_of_resources()
124 (!tp->snd_wnd && !tp->packets_out)) in tcp_out_of_resources()
144 * tcp_orphan_retries() - Returns maximal number of retries on an orphaned socket
150 int retries = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_orphan_retries); /* May be zero. */ in tcp_orphan_retries() local
153 if (READ_ONCE(sk->sk_err_soft) && !alive) in tcp_orphan_retries()
154 retries = 0; in tcp_orphan_retries()
157 * number of retries. 8 corresponds to >100 seconds with minimal in tcp_orphan_retries()
159 if (retries == 0 && alive) in tcp_orphan_retries()
160 retries = 8; in tcp_orphan_retries()
161 return retries; in tcp_orphan_retries()
170 if (!READ_ONCE(net->ipv4.sysctl_tcp_mtu_probing)) in tcp_mtu_probing()
173 if (!icsk->icsk_mtup.enabled) { in tcp_mtu_probing()
174 icsk->icsk_mtup.enabled = 1; in tcp_mtu_probing()
175 icsk->icsk_mtup.probe_timestamp = tcp_jiffies32; in tcp_mtu_probing()
177 mss = tcp_mtu_to_mss(sk, icsk->icsk_mtup.search_low) >> 1; in tcp_mtu_probing()
178 mss = min(READ_ONCE(net->ipv4.sysctl_tcp_base_mss), mss); in tcp_mtu_probing()
179 mss = max(mss, READ_ONCE(net->ipv4.sysctl_tcp_mtu_probe_floor)); in tcp_mtu_probing()
180 mss = max(mss, READ_ONCE(net->ipv4.sysctl_tcp_min_snd_mss)); in tcp_mtu_probing()
181 icsk->icsk_mtup.search_low = tcp_mss_to_mtu(sk, mss); in tcp_mtu_probing()
183 tcp_sync_mss(sk, icsk->icsk_pmtu_cookie); in tcp_mtu_probing()
194 timeout = ((2 << boundary) - 1) * rto_base; in tcp_model_timeout()
196 timeout = ((2 << linear_backoff_thresh) - 1) * rto_base + in tcp_model_timeout()
197 (boundary - linear_backoff_thresh) * TCP_RTO_MAX; in tcp_model_timeout()
201 * retransmits_timed_out() - returns true if this connection has timed out
203 * @boundary: max number of retransmissions
210 * after "boundary" unsuccessful, exponentially backed-off
220 if (!inet_csk(sk)->icsk_retransmits) in retransmits_timed_out()
223 start_ts = tp->retrans_stamp; in retransmits_timed_out()
227 if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) in retransmits_timed_out()
232 if (tp->tcp_usec_ts) { in retransmits_timed_out()
234 delta = tp->tcp_mstamp - start_ts + jiffies_to_usecs(1); in retransmits_timed_out()
235 return (s32)(delta - timeout * USEC_PER_MSEC) >= 0; in retransmits_timed_out()
237 return (s32)(tcp_time_stamp_ts(tp) - start_ts - timeout) >= 0; in retransmits_timed_out()
249 if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) { in tcp_write_timeout()
250 if (icsk->icsk_retransmits) in tcp_write_timeout()
253 retry_until = READ_ONCE(icsk->icsk_syn_retries) ? : in tcp_write_timeout()
254 READ_ONCE(net->ipv4.sysctl_tcp_syn_retries); in tcp_write_timeout()
257 if (sk->sk_state == TCP_SYN_SENT) in tcp_write_timeout()
258 max_retransmits += READ_ONCE(net->ipv4.sysctl_tcp_syn_linear_timeouts); in tcp_write_timeout()
260 expired = icsk->icsk_retransmits >= max_retransmits; in tcp_write_timeout()
262 if (retransmits_timed_out(sk, READ_ONCE(net->ipv4.sysctl_tcp_retries1), 0)) { in tcp_write_timeout()
269 retry_until = READ_ONCE(net->ipv4.sysctl_tcp_retries2); in tcp_write_timeout()
271 const bool alive = icsk->icsk_rto < TCP_RTO_MAX; in tcp_write_timeout()
283 READ_ONCE(icsk->icsk_user_timeout)); in tcp_write_timeout()
289 icsk->icsk_retransmits, in tcp_write_timeout()
290 icsk->icsk_rto, (int)expired); in tcp_write_timeout()
299 tp->timeout_rehash++; in tcp_write_timeout()
312 if ((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN)) in tcp_delack_timer_handler()
316 if (tp->compressed_ack) { in tcp_delack_timer_handler()
322 if (!(icsk->icsk_ack.pending & ICSK_ACK_TIMER)) in tcp_delack_timer_handler()
325 if (time_after(icsk->icsk_ack.timeout, jiffies)) { in tcp_delack_timer_handler()
326 sk_reset_timer(sk, &icsk->icsk_delack_timer, icsk->icsk_ack.timeout); in tcp_delack_timer_handler()
329 icsk->icsk_ack.pending &= ~ICSK_ACK_TIMER; in tcp_delack_timer_handler()
334 icsk->icsk_ack.ato = min_t(u32, icsk->icsk_ack.ato << 1, icsk->icsk_rto); in tcp_delack_timer_handler()
340 icsk->icsk_ack.ato = TCP_ATO_MIN; in tcp_delack_timer_handler()
350 * tcp_delack_timer() - The TCP delayed ACK timeout handler
362 struct sock *sk = &icsk->icsk_inet.sk; in tcp_delack_timer()
368 if (!(smp_load_acquire(&icsk->icsk_ack.pending) & ICSK_ACK_TIMER) && in tcp_delack_timer()
369 !READ_ONCE(tcp_sk(sk)->compressed_ack)) in tcp_delack_timer()
378 if (!test_and_set_bit(TCP_DELACK_TIMER_DEFERRED, &sk->sk_tsq_flags)) in tcp_delack_timer()
393 if (tp->packets_out || !skb) { in tcp_probe_timer()
394 icsk->icsk_probes_out = 0; in tcp_probe_timer()
395 icsk->icsk_probes_tstamp = 0; in tcp_probe_timer()
407 if (!icsk->icsk_probes_tstamp) { in tcp_probe_timer()
408 icsk->icsk_probes_tstamp = tcp_jiffies32; in tcp_probe_timer()
410 u32 user_timeout = READ_ONCE(icsk->icsk_user_timeout); in tcp_probe_timer()
413 (s32)(tcp_jiffies32 - icsk->icsk_probes_tstamp) >= in tcp_probe_timer()
417 max_probes = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_retries2); in tcp_probe_timer()
422 if (!alive && icsk->icsk_backoff >= max_probes) in tcp_probe_timer()
428 if (icsk->icsk_probes_out >= max_probes) { in tcp_probe_timer()
441 if (!icsk->icsk_retransmits) { in tcp_update_rto_stats()
442 tp->total_rto_recoveries++; in tcp_update_rto_stats()
443 tp->rto_stamp = tcp_time_stamp_ms(tp); in tcp_update_rto_stats()
445 icsk->icsk_retransmits++; in tcp_update_rto_stats()
446 tp->total_rto++; in tcp_update_rto_stats()
459 req->rsk_ops->syn_ack_timeout(req); in tcp_fastopen_synack_timer()
464 max_retries = READ_ONCE(icsk->icsk_syn_retries) ? : in tcp_fastopen_synack_timer()
465 READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_synack_retries) + 1; in tcp_fastopen_synack_timer()
467 if (req->num_timeout >= max_retries) { in tcp_fastopen_synack_timer()
472 if (icsk->icsk_retransmits == 1) in tcp_fastopen_synack_timer()
474 /* XXX (TFO) - Unlike regular SYN-ACK retransmit, we ignore error in tcp_fastopen_synack_timer()
480 req->num_timeout++; in tcp_fastopen_synack_timer()
482 if (!tp->retrans_stamp) in tcp_fastopen_synack_timer()
483 tp->retrans_stamp = tcp_time_stamp_ts(tp); in tcp_fastopen_synack_timer()
485 req->timeout << req->num_timeout, TCP_RTO_MAX); in tcp_fastopen_synack_timer()
493 u32 user_timeout = READ_ONCE(icsk->icsk_user_timeout); in tcp_rtx_probe0_timed_out()
508 * and tp->rcv_tstamp might very well have been written recently. in tcp_rtx_probe0_timed_out()
511 rcv_delta = icsk->icsk_timeout - tp->rcv_tstamp; in tcp_rtx_probe0_timed_out()
519 * tcp_retransmit_timer() - The TCP retransmit timeout handler
537 req = rcu_dereference_protected(tp->fastopen_rsk, in tcp_retransmit_timer()
540 WARN_ON_ONCE(sk->sk_state != TCP_SYN_RECV && in tcp_retransmit_timer()
541 sk->sk_state != TCP_FIN_WAIT1); in tcp_retransmit_timer()
543 /* Before we receive ACK to our SYN-ACK don't retransmit in tcp_retransmit_timer()
549 if (!tp->packets_out) in tcp_retransmit_timer()
556 if (!tp->snd_wnd && !sock_flag(sk, SOCK_DEAD) && in tcp_retransmit_timer()
557 !((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV))) { in tcp_retransmit_timer()
566 rtx_delta = tcp_time_stamp_ts(tp) - (tp->retrans_stamp ?: in tcp_retransmit_timer()
567 tcp_skb_timestamp_ts(tp->tcp_usec_ts, skb)); in tcp_retransmit_timer()
568 if (tp->tcp_usec_ts) in tcp_retransmit_timer()
571 if (sk->sk_family == AF_INET) { in tcp_retransmit_timer()
572 … net_dbg_ratelimited("Probing zero-window on %pI4:%u/%u, seq=%u:%u, recv %ums ago, lasting %ums\n", in tcp_retransmit_timer()
573 &inet->inet_daddr, ntohs(inet->inet_dport), in tcp_retransmit_timer()
574 inet->inet_num, tp->snd_una, tp->snd_nxt, in tcp_retransmit_timer()
575 jiffies_to_msecs(jiffies - tp->rcv_tstamp), in tcp_retransmit_timer()
579 else if (sk->sk_family == AF_INET6) { in tcp_retransmit_timer()
580 … net_dbg_ratelimited("Probing zero-window on %pI6:%u/%u, seq=%u:%u, recv %ums ago, lasting %ums\n", in tcp_retransmit_timer()
581 &sk->sk_v6_daddr, ntohs(inet->inet_dport), in tcp_retransmit_timer()
582 inet->inet_num, tp->snd_una, tp->snd_nxt, in tcp_retransmit_timer()
583 jiffies_to_msecs(jiffies - tp->rcv_tstamp), in tcp_retransmit_timer()
601 if (icsk->icsk_retransmits == 0) { in tcp_retransmit_timer()
604 if (icsk->icsk_ca_state == TCP_CA_Recovery) { in tcp_retransmit_timer()
609 } else if (icsk->icsk_ca_state == TCP_CA_Loss) { in tcp_retransmit_timer()
611 } else if ((icsk->icsk_ca_state == TCP_CA_Disorder) || in tcp_retransmit_timer()
612 tp->sacked_out) { in tcp_retransmit_timer()
659 * linear-timeout retransmissions into a black hole in tcp_retransmit_timer()
661 if (sk->sk_state == TCP_ESTABLISHED && in tcp_retransmit_timer()
662 (tp->thin_lto || READ_ONCE(net->ipv4.sysctl_tcp_thin_linear_timeouts)) && in tcp_retransmit_timer()
664 icsk->icsk_retransmits <= TCP_THIN_LINEAR_RETRIES) { in tcp_retransmit_timer()
665 icsk->icsk_backoff = 0; in tcp_retransmit_timer()
666 icsk->icsk_rto = clamp(__tcp_set_rto(tp), in tcp_retransmit_timer()
669 } else if (sk->sk_state != TCP_SYN_SENT || in tcp_retransmit_timer()
670 tp->total_rto > in tcp_retransmit_timer()
671 READ_ONCE(net->ipv4.sysctl_tcp_syn_linear_timeouts)) { in tcp_retransmit_timer()
675 icsk->icsk_backoff++; in tcp_retransmit_timer()
676 icsk->icsk_rto = min(icsk->icsk_rto << 1, TCP_RTO_MAX); in tcp_retransmit_timer()
680 if (retransmits_timed_out(sk, READ_ONCE(net->ipv4.sysctl_tcp_retries1) + 1, 0)) in tcp_retransmit_timer()
686 /* Called with bottom-half processing disabled.
693 if (((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN)) || in tcp_write_timer_handler()
694 !icsk->icsk_pending) in tcp_write_timer_handler()
697 if (time_after(icsk->icsk_timeout, jiffies)) { in tcp_write_timer_handler()
698 sk_reset_timer(sk, &icsk->icsk_retransmit_timer, icsk->icsk_timeout); in tcp_write_timer_handler()
703 event = icsk->icsk_pending; in tcp_write_timer_handler()
713 smp_store_release(&icsk->icsk_pending, 0); in tcp_write_timer_handler()
717 smp_store_release(&icsk->icsk_pending, 0); in tcp_write_timer_handler()
727 struct sock *sk = &icsk->icsk_inet.sk; in tcp_write_timer()
730 if (!smp_load_acquire(&icsk->icsk_pending)) in tcp_write_timer()
738 if (!test_and_set_bit(TCP_WRITE_TIMER_DEFERRED, &sk->sk_tsq_flags)) in tcp_write_timer()
748 struct net *net = read_pnet(&inet_rsk(req)->ireq_net); in tcp_syn_ack_timeout()
756 if ((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_LISTEN)) in tcp_set_keepalive()
782 if (sk->sk_state == TCP_LISTEN) { in tcp_keepalive_timer()
788 if (sk->sk_state == TCP_FIN_WAIT2 && sock_flag(sk, SOCK_DEAD)) { in tcp_keepalive_timer()
789 if (READ_ONCE(tp->linger2) >= 0) { in tcp_keepalive_timer()
790 const int tmo = tcp_fin_time(sk) - TCP_TIMEWAIT_LEN; in tcp_keepalive_timer()
802 ((1 << sk->sk_state) & (TCPF_CLOSE | TCPF_SYN_SENT))) in tcp_keepalive_timer()
808 if (tp->packets_out || !tcp_write_queue_empty(sk)) in tcp_keepalive_timer()
814 u32 user_timeout = READ_ONCE(icsk->icsk_user_timeout); in tcp_keepalive_timer()
821 icsk->icsk_probes_out > 0) || in tcp_keepalive_timer()
823 icsk->icsk_probes_out >= keepalive_probes(tp))) { in tcp_keepalive_timer()
830 icsk->icsk_probes_out++; in tcp_keepalive_timer()
839 /* It is tp->rcv_tstamp + keepalive_time_when(tp) */ in tcp_keepalive_timer()
840 elapsed = keepalive_time_when(tp) - elapsed; in tcp_keepalive_timer()
862 if (tp->compressed_ack) { in tcp_compressed_ack_kick()
864 * subtract one from tp->compressed_ack to keep in tcp_compressed_ack_kick()
867 tp->compressed_ack--; in tcp_compressed_ack_kick()
873 &sk->sk_tsq_flags)) in tcp_compressed_ack_kick()
887 hrtimer_init(&tcp_sk(sk)->pacing_timer, CLOCK_MONOTONIC, in tcp_init_xmit_timers()
889 tcp_sk(sk)->pacing_timer.function = tcp_pace_kick; in tcp_init_xmit_timers()
891 hrtimer_init(&tcp_sk(sk)->compressed_ack_timer, CLOCK_MONOTONIC, in tcp_init_xmit_timers()
893 tcp_sk(sk)->compressed_ack_timer.function = tcp_compressed_ack_kick; in tcp_init_xmit_timers()