net: Modify sk_alloc to not reference count the netns of kernel sockets.
[linux-2.6-microblaze.git] / net / netfilter / ipvs / ip_vs_sync.c
index 2e9a5b5..b08ba95 100644 (file)
@@ -1457,18 +1457,12 @@ static struct socket *make_send_sock(struct net *net, int id)
        struct socket *sock;
        int result;
 
-       /* First create a socket move it to right name space later */
-       result = sock_create_kern(&init_net, PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
+       /* First create a socket */
+       result = sock_create_kern(net, PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
        if (result < 0) {
                pr_err("Error during creation of socket; terminating\n");
                return ERR_PTR(result);
        }
-       /*
-        * Kernel sockets that are a part of a namespace, should not
-        * hold a reference to a namespace in order to allow to stop it.
-        * After sk_change_net should be released using sk_release_kernel.
-        */
-       sk_change_net(sock->sk, net);
        result = set_mcast_if(sock->sk, ipvs->master_mcast_ifn);
        if (result < 0) {
                pr_err("Error setting outbound mcast interface\n");
@@ -1497,7 +1491,7 @@ static struct socket *make_send_sock(struct net *net, int id)
        return sock;
 
 error:
-       sk_release_kernel(sock->sk);
+       sock_release(sock);
        return ERR_PTR(result);
 }
 
@@ -1518,17 +1512,11 @@ static struct socket *make_receive_sock(struct net *net, int id)
        int result;
 
        /* First create a socket */
-       result = sock_create_kern(&init_net, PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
+       result = sock_create_kern(net, PF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
        if (result < 0) {
                pr_err("Error during creation of socket; terminating\n");
                return ERR_PTR(result);
        }
-       /*
-        * Kernel sockets that are a part of a namespace, should not
-        * hold a reference to a namespace in order to allow to stop it.
-        * After sk_change_net should be released using sk_release_kernel.
-        */
-       sk_change_net(sock->sk, net);
        /* it is equivalent to the REUSEADDR option in user-space */
        sock->sk->sk_reuse = SK_CAN_REUSE;
        result = sysctl_sync_sock_size(ipvs);
@@ -1554,7 +1542,7 @@ static struct socket *make_receive_sock(struct net *net, int id)
        return sock;
 
 error:
-       sk_release_kernel(sock->sk);
+       sock_release(sock);
        return ERR_PTR(result);
 }
 
@@ -1692,7 +1680,7 @@ done:
                ip_vs_sync_buff_release(sb);
 
        /* release the sending multicast socket */
-       sk_release_kernel(tinfo->sock->sk);
+       sock_release(tinfo->sock);
        kfree(tinfo);
 
        return 0;
@@ -1729,7 +1717,7 @@ static int sync_thread_backup(void *data)
        }
 
        /* release the sending multicast socket */
-       sk_release_kernel(tinfo->sock->sk);
+       sock_release(tinfo->sock);
        kfree(tinfo->buf);
        kfree(tinfo);
 
@@ -1854,11 +1842,11 @@ int start_sync_thread(struct net *net, int state, char *mcast_ifn, __u8 syncid)
        return 0;
 
 outsocket:
-       sk_release_kernel(sock->sk);
+       sock_release(sock);
 
 outtinfo:
        if (tinfo) {
-               sk_release_kernel(tinfo->sock->sk);
+               sock_release(tinfo->sock);
                kfree(tinfo->buf);
                kfree(tinfo);
        }