|
@@ -3279,6 +3279,7 @@ void tcp_send_probe0(struct sock *sk)
|
|
|
{
|
|
|
struct inet_connection_sock *icsk = inet_csk(sk);
|
|
|
struct tcp_sock *tp = tcp_sk(sk);
|
|
|
+ unsigned long probe_max;
|
|
|
int err;
|
|
|
|
|
|
err = tcp_write_wakeup(sk);
|
|
@@ -3294,9 +3295,7 @@ void tcp_send_probe0(struct sock *sk)
|
|
|
if (icsk->icsk_backoff < sysctl_tcp_retries2)
|
|
|
icsk->icsk_backoff++;
|
|
|
icsk->icsk_probes_out++;
|
|
|
- inet_csk_reset_xmit_timer(sk, ICSK_TIME_PROBE0,
|
|
|
- min(icsk->icsk_rto << icsk->icsk_backoff, TCP_RTO_MAX),
|
|
|
- TCP_RTO_MAX);
|
|
|
+ probe_max = TCP_RTO_MAX;
|
|
|
} else {
|
|
|
/* If packet was not sent due to local congestion,
|
|
|
* do not backoff and do not remember icsk_probes_out.
|
|
@@ -3306,11 +3305,11 @@ void tcp_send_probe0(struct sock *sk)
|
|
|
*/
|
|
|
if (!icsk->icsk_probes_out)
|
|
|
icsk->icsk_probes_out = 1;
|
|
|
- inet_csk_reset_xmit_timer(sk, ICSK_TIME_PROBE0,
|
|
|
- min(icsk->icsk_rto << icsk->icsk_backoff,
|
|
|
- TCP_RESOURCE_PROBE_INTERVAL),
|
|
|
- TCP_RTO_MAX);
|
|
|
+ probe_max = TCP_RESOURCE_PROBE_INTERVAL;
|
|
|
}
|
|
|
+ inet_csk_reset_xmit_timer(sk, ICSK_TIME_PROBE0,
|
|
|
+ inet_csk_rto_backoff(icsk, probe_max),
|
|
|
+ TCP_RTO_MAX);
|
|
|
}
|
|
|
|
|
|
int tcp_rtx_synack(struct sock *sk, struct request_sock *req)
|