]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - net/l2tp/l2tp_core.c
Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso...
[mirror_ubuntu-zesty-kernel.git] / net / l2tp / l2tp_core.c
index 1109d3bb8dac8d4142eb6bdd159915b2f978ea45..895348e44c7d22c9e6d4828195e7099a74154531 100644 (file)
@@ -148,7 +148,7 @@ do {                                                                        \
                 atomic_read(&_t->ref_count));                          \
        l2tp_tunnel_inc_refcount_1(_t);                                 \
 } while (0)
-#define l2tp_tunnel_dec_refcount(_t)
+#define l2tp_tunnel_dec_refcount(_t)                                   \
 do {                                                                   \
        pr_debug("l2tp_tunnel_dec_refcount: %s:%d %s: cnt=%d\n",        \
                 __func__, __LINE__, (_t)->name,                        \
@@ -1582,19 +1582,17 @@ int l2tp_tunnel_create(struct net *net, int fd, int version, u32 tunnel_id, u32
        /* Mark socket as an encapsulation socket. See net/ipv4/udp.c */
        tunnel->encap = encap;
        if (encap == L2TP_ENCAPTYPE_UDP) {
-               /* Mark socket as an encapsulation socket. See net/ipv4/udp.c */
-               udp_sk(sk)->encap_type = UDP_ENCAP_L2TPINUDP;
-               udp_sk(sk)->encap_rcv = l2tp_udp_encap_recv;
-               udp_sk(sk)->encap_destroy = l2tp_udp_encap_destroy;
-#if IS_ENABLED(CONFIG_IPV6)
-               if (sk->sk_family == PF_INET6 && !tunnel->v4mapped)
-                       udpv6_encap_enable();
-               else
-#endif
-               udp_encap_enable();
-       }
+               struct udp_tunnel_sock_cfg udp_cfg;
+
+               udp_cfg.sk_user_data = tunnel;
+               udp_cfg.encap_type = UDP_ENCAP_L2TPINUDP;
+               udp_cfg.encap_rcv = l2tp_udp_encap_recv;
+               udp_cfg.encap_destroy = l2tp_udp_encap_destroy;
 
-       sk->sk_user_data = tunnel;
+               setup_udp_tunnel_sock(net, sock, &udp_cfg);
+       } else {
+               sk->sk_user_data = tunnel;
+       }
 
        /* Hook on the tunnel socket destructor so that we can cleanup
         * if the tunnel socket goes away.