Merge branch 'davem-next.r8169' of git://violet.fr.zoreil.com/romieu/linux
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / net / ipv6 / udp.c
index f05099fc59016fdfc405ba13ed4351f30fad2487..1ecd10249488b8962b91327db248569c4a97d1c6 100644 (file)
@@ -48,6 +48,7 @@
 
 #include <linux/proc_fs.h>
 #include <linux/seq_file.h>
+#include <trace/events/skb.h>
 #include "udp_impl.h"
 
 int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2)
@@ -385,15 +386,16 @@ try_again:
 
        if (skb_csum_unnecessary(skb))
                err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr),
-                                             msg->msg_iov, copied       );
+                                             msg->msg_iov, copied);
        else {
                err = skb_copy_and_csum_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov);
                if (err == -EINVAL)
                        goto csum_copy_err;
        }
-       if (err)
+       if (unlikely(err)) {
+               trace_kfree_skb(skb, udpv6_recvmsg);
                goto out_free;
-
+       }
        if (!peeked) {
                if (is_udp4)
                        UDP_INC_STATS_USER(sock_net(sk),
@@ -479,6 +481,9 @@ void __udp6_lib_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
        if (sk == NULL)
                return;
 
+       if (type == ICMPV6_PKT_TOOBIG)
+               ip6_sk_update_pmtu(skb, sk, info);
+
        np = inet6_sk(sk);
 
        if (!icmpv6_err_convert(type, code, &err) && !np->recverr)