]> rtime.felk.cvut.cz Git - can-eth-gw-linux.git/blobdiff - net/ipv6/tcp_ipv6.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[can-eth-gw-linux.git] / net / ipv6 / tcp_ipv6.c
index 09078b9bc6f6ff1a7622883a5a66751ba3d25f42..f3bfb8bbfdec3f2a15b9afa17c2dfa80f59033e0 100644 (file)
@@ -403,8 +403,9 @@ static void tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
                tp->mtu_info = ntohl(info);
                if (!sock_owned_by_user(sk))
                        tcp_v6_mtu_reduced(sk);
-               else
-                       set_bit(TCP_MTU_REDUCED_DEFERRED, &tp->tsq_flags);
+               else if (!test_and_set_bit(TCP_MTU_REDUCED_DEFERRED,
+                                          &tp->tsq_flags))
+                       sock_hold(sk);
                goto out;
        }