Merge git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/linux-2.6-nsfd
[pandora-kernel.git] / net / core / net_namespace.c
index d4cf178..6c6b86d 100644 (file)
@@ -29,14 +29,6 @@ EXPORT_SYMBOL(init_net);
 
 #define INITIAL_NET_GEN_PTRS   13 /* +1 for len +2 for rcu_head */
 
-static void net_generic_release(struct rcu_head *rcu)
-{
-       struct net_generic *ng;
-
-       ng = container_of(rcu, struct net_generic, rcu);
-       kfree(ng);
-}
-
 static int net_assign_generic(struct net *net, int id, void *data)
 {
        struct net_generic *ng, *old_ng;
@@ -70,7 +62,7 @@ static int net_assign_generic(struct net *net, int id, void *data)
        memcpy(&ng->ptr, &old_ng->ptr, old_ng->len * sizeof(void*));
 
        rcu_assign_pointer(net->gen, ng);
-       call_rcu(&old_ng->rcu, net_generic_release);
+       kfree_rcu(old_ng, rcu);
 assign:
        ng->ptr[id - 1] = data;
        return 0;
@@ -218,11 +210,14 @@ static void net_free(struct net *net)
        kmem_cache_free(net_cachep, net);
 }
 
-static struct net *net_create(void)
+struct net *copy_net_ns(unsigned long flags, struct net *old_net)
 {
        struct net *net;
        int rv;
 
+       if (!(flags & CLONE_NEWNET))
+               return get_net(old_net);
+
        net = net_alloc();
        if (!net)
                return ERR_PTR(-ENOMEM);
@@ -241,13 +236,6 @@ static struct net *net_create(void)
        return net;
 }
 
-struct net *copy_net_ns(unsigned long flags, struct net *old_net)
-{
-       if (!(flags & CLONE_NEWNET))
-               return get_net(old_net);
-       return net_create();
-}
-
 static DEFINE_SPINLOCK(cleanup_list_lock);
 static LIST_HEAD(cleanup_list);  /* Must hold cleanup_list_lock to touch */