aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/tcp_timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4/tcp_timer.c')
-rw-r--r--net/ipv4/tcp_timer.c31
1 files changed, 14 insertions, 17 deletions
diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
index 035a1ef1f2d8..16df6dd44b98 100644
--- a/net/ipv4/tcp_timer.c
+++ b/net/ipv4/tcp_timer.c
@@ -107,26 +107,23 @@ static int tcp_orphan_retries(struct sock *sk, bool alive)
107 107
108static void tcp_mtu_probing(struct inet_connection_sock *icsk, struct sock *sk) 108static void tcp_mtu_probing(struct inet_connection_sock *icsk, struct sock *sk)
109{ 109{
110 struct net *net = sock_net(sk); 110 const struct net *net = sock_net(sk);
111 int mss;
111 112
112 /* Black hole detection */ 113 /* Black hole detection */
113 if (net->ipv4.sysctl_tcp_mtu_probing) { 114 if (!net->ipv4.sysctl_tcp_mtu_probing)
114 if (!icsk->icsk_mtup.enabled) { 115 return;
115 icsk->icsk_mtup.enabled = 1; 116
116 icsk->icsk_mtup.probe_timestamp = tcp_jiffies32; 117 if (!icsk->icsk_mtup.enabled) {
117 tcp_sync_mss(sk, icsk->icsk_pmtu_cookie); 118 icsk->icsk_mtup.enabled = 1;
118 } else { 119 icsk->icsk_mtup.probe_timestamp = tcp_jiffies32;
119 struct net *net = sock_net(sk); 120 } else {
120 struct tcp_sock *tp = tcp_sk(sk); 121 mss = tcp_mtu_to_mss(sk, icsk->icsk_mtup.search_low) >> 1;
121 int mss; 122 mss = min(net->ipv4.sysctl_tcp_base_mss, mss);
122 123 mss = max(mss, 68 - tcp_sk(sk)->tcp_header_len);
123 mss = tcp_mtu_to_mss(sk, icsk->icsk_mtup.search_low) >> 1; 124 icsk->icsk_mtup.search_low = tcp_mss_to_mtu(sk, mss);
124 mss = min(net->ipv4.sysctl_tcp_base_mss, mss);
125 mss = max(mss, 68 - tp->tcp_header_len);
126 icsk->icsk_mtup.search_low = tcp_mss_to_mtu(sk, mss);
127 tcp_sync_mss(sk, icsk->icsk_pmtu_cookie);
128 }
129 } 125 }
126 tcp_sync_mss(sk, icsk->icsk_pmtu_cookie);
130} 127}
131 128
132 129