return;
 
        switch (type) {
-               __u32 teli;
                struct ipv6_tlv_tnl_enc_lim *tel;
-               __u32 mtu;
+               __u32 teli;
        case ICMPV6_DEST_UNREACH:
                net_dbg_ratelimited("%s: Path to destination invalid or inactive!\n",
                                    t->parms.name);
                }
                return;
        case ICMPV6_PKT_TOOBIG:
-               mtu = be32_to_cpu(info) - offset - t->tun_hlen;
-               if (t->dev->type == ARPHRD_ETHER)
-                       mtu -= ETH_HLEN;
-               if (mtu < IPV6_MIN_MTU)
-                       mtu = IPV6_MIN_MTU;
-               t->dev->mtu = mtu;
+               ip6_update_pmtu(skb, net, info, 0, 0, sock_net_uid(net, NULL));
                return;
        case NDISC_REDIRECT:
                ip6_redirect(skb, net, skb->dev->ifindex, 0,
                               __u32 *pmtu, __be16 proto)
 {
        struct ip6_tnl *tunnel = netdev_priv(dev);
-       struct dst_entry *dst = skb_dst(skb);
        __be16 protocol;
 
        if (dev->type == ARPHRD_ETHER)
        gre_build_header(skb, tunnel->tun_hlen, tunnel->parms.o_flags,
                         protocol, tunnel->parms.o_key, htonl(tunnel->o_seqno));
 
-       /* TooBig packet may have updated dst->dev's mtu */
-       if (dst && dst_mtu(dst) > dst->dev->mtu)
-               dst->ops->update_pmtu(dst, NULL, skb, dst->dev->mtu);
-
        return ip6_tnl_xmit(skb, dev, dsfield, fl6, encap_limit, pmtu,
                            NEXTHDR_GRE);
 }