net: Simplify conntrack_proto_dccp pernet operations.
Eric W. Biederman [Sun, 29 Nov 2009 15:46:07 +0000 (15:46 +0000)]
Take advantage of the new pernet automatic storage management,
and stop using compatibility network namespace functions.

Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

net/netfilter/nf_conntrack_proto_dccp.c

index 80abdf2..98916ef 100644 (file)
@@ -810,12 +810,7 @@ static struct nf_conntrack_l4proto dccp_proto6 __read_mostly = {
 
 static __net_init int dccp_net_init(struct net *net)
 {
-       struct dccp_net *dn;
-       int err;
-
-       dn = kmalloc(sizeof(*dn), GFP_KERNEL);
-       if (!dn)
-               return -ENOMEM;
+       struct dccp_net *dn = dccp_pernet(net);
 
        /* default values */
        dn->dccp_loose = 1;
@@ -827,16 +822,11 @@ static __net_init int dccp_net_init(struct net *net)
        dn->dccp_timeout[CT_DCCP_CLOSING]       = 64 * HZ;
        dn->dccp_timeout[CT_DCCP_TIMEWAIT]      = 2 * DCCP_MSL;
 
-       err = net_assign_generic(net, dccp_net_id, dn);
-       if (err)
-               goto out;
-
 #ifdef CONFIG_SYSCTL
-       err = -ENOMEM;
        dn->sysctl_table = kmemdup(dccp_sysctl_table,
                        sizeof(dccp_sysctl_table), GFP_KERNEL);
        if (!dn->sysctl_table)
-               goto out;
+               return -ENOMEM;
 
        dn->sysctl_table[0].data = &dn->dccp_timeout[CT_DCCP_REQUEST];
        dn->sysctl_table[1].data = &dn->dccp_timeout[CT_DCCP_RESPOND];
@@ -851,15 +841,11 @@ static __net_init int dccp_net_init(struct net *net)
                        nf_net_netfilter_sysctl_path, dn->sysctl_table);
        if (!dn->sysctl_header) {
                kfree(dn->sysctl_table);
-               goto out;
+               return -ENOMEM;
        }
 #endif
 
        return 0;
-
-out:
-       kfree(dn);
-       return err;
 }
 
 static __net_exit void dccp_net_exit(struct net *net)
@@ -869,21 +855,20 @@ static __net_exit void dccp_net_exit(struct net *net)
        unregister_net_sysctl_table(dn->sysctl_header);
        kfree(dn->sysctl_table);
 #endif
-       kfree(dn);
-
-       net_assign_generic(net, dccp_net_id, NULL);
 }
 
 static struct pernet_operations dccp_net_ops = {
        .init = dccp_net_init,
        .exit = dccp_net_exit,
+       .id   = &dccp_net_id,
+       .size = sizeof(struct dccp_net),
 };
 
 static int __init nf_conntrack_proto_dccp_init(void)
 {
        int err;
 
-       err = register_pernet_gen_subsys(&dccp_net_id, &dccp_net_ops);
+       err = register_pernet_subsys(&dccp_net_ops);
        if (err < 0)
                goto err1;
 
@@ -899,14 +884,14 @@ static int __init nf_conntrack_proto_dccp_init(void)
 err3:
        nf_conntrack_l4proto_unregister(&dccp_proto4);
 err2:
-       unregister_pernet_gen_subsys(dccp_net_id, &dccp_net_ops);
+       unregister_pernet_subsys(&dccp_net_ops);
 err1:
        return err;
 }
 
 static void __exit nf_conntrack_proto_dccp_fini(void)
 {
-       unregister_pernet_gen_subsys(dccp_net_id, &dccp_net_ops);
+       unregister_pernet_subsys(&dccp_net_ops);
        nf_conntrack_l4proto_unregister(&dccp_proto6);
        nf_conntrack_l4proto_unregister(&dccp_proto4);
 }