]> err.no Git - linux-2.6/blobdiff - net/ipv6/tcp_ipv6.c
[IPV6]: Simplify IPv6 control sockets creation.
[linux-2.6] / net / ipv6 / tcp_ipv6.c
index 323c7e06ef43da3d2509c1d3c7f5272fdc89a1e3..378cc4002a76c3d2f8226af7698a625fe76bfbec 100644 (file)
@@ -60,6 +60,7 @@
 #include <net/dsfield.h>
 #include <net/timewait_sock.h>
 #include <net/netdma.h>
+#include <net/inet_common.h>
 
 #include <asm/uaccess.h>
 
@@ -2140,8 +2141,6 @@ void tcp6_proc_exit(struct net *net)
 }
 #endif
 
-DEFINE_PROTO_INUSE(tcpv6)
-
 struct proto tcpv6_prot = {
        .name                   = "TCPv6",
        .owner                  = THIS_MODULE,
@@ -2177,7 +2176,6 @@ struct proto tcpv6_prot = {
        .compat_setsockopt      = compat_tcp_setsockopt,
        .compat_getsockopt      = compat_tcp_getsockopt,
 #endif
-       REF_PROTO_INUSE(tcpv6)
 };
 
 static struct inet6_protocol tcpv6_protocol = {
@@ -2201,22 +2199,13 @@ static struct inet_protosw tcpv6_protosw = {
 
 static int tcpv6_net_init(struct net *net)
 {
-       int err;
-       struct socket *sock;
-       struct sock *sk;
-
-       err = inet_csk_ctl_sock_create(&sock, PF_INET6, SOCK_RAW, IPPROTO_TCP);
-       if (err)
-               return err;
-
-       net->ipv6.tcp_sk = sk = sock->sk;
-       sk_change_net(sk, net);
-       return err;
+       return inet_ctl_sock_create(&net->ipv6.tcp_sk, PF_INET6,
+                                   SOCK_RAW, IPPROTO_TCP, net);
 }
 
 static void tcpv6_net_exit(struct net *net)
 {
-       sk_release_kernel(net->ipv6.tcp_sk);
+       inet_ctl_sock_destroy(net->ipv6.tcp_sk);
 }
 
 static struct pernet_operations tcpv6_net_ops = {