|
@@ -274,13 +274,6 @@ static void tcp_v4_mtu_reduced(struct sock *sk)
|
|
|
struct inet_sock *inet = inet_sk(sk);
|
|
|
u32 mtu = tcp_sk(sk)->mtu_info;
|
|
|
|
|
|
- /* We are not interested in TCP_LISTEN and open_requests (SYN-ACKs
|
|
|
- * send out by Linux are always <576bytes so they should go through
|
|
|
- * unfragmented).
|
|
|
- */
|
|
|
- if (sk->sk_state == TCP_LISTEN)
|
|
|
- return;
|
|
|
-
|
|
|
dst = inet_csk_update_pmtu(sk, mtu);
|
|
|
if (!dst)
|
|
|
return;
|
|
@@ -408,6 +401,13 @@ void tcp_v4_err(struct sk_buff *icmp_skb, u32 info)
|
|
|
goto out;
|
|
|
|
|
|
if (code == ICMP_FRAG_NEEDED) { /* PMTU discovery (RFC1191) */
|
|
|
+ /* We are not interested in TCP_LISTEN and open_requests
|
|
|
+ * (SYN-ACKs send out by Linux are always <576bytes so
|
|
|
+ * they should go through unfragmented).
|
|
|
+ */
|
|
|
+ if (sk->sk_state == TCP_LISTEN)
|
|
|
+ goto out;
|
|
|
+
|
|
|
tp->mtu_info = info;
|
|
|
if (!sock_owned_by_user(sk)) {
|
|
|
tcp_v4_mtu_reduced(sk);
|