aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorGao feng <gaofeng@cn.fujitsu.com>2013-01-21 17:10:26 -0500
committerPablo Neira Ayuso <pablo@netfilter.org>2013-01-23 06:55:29 -0500
commitb7ff3a1fae78783e0ab1ef82f5978aeb89ddd16b (patch)
treef8367cc6601a911b8a88de7db697c33c9df48e89 /net
parent83b4dbe19844b5472a8f44b6cf1d88693c080ef7 (diff)
netfilter: nf_ct_acct: move initialization out of pernet_operations
Move the global initial codes to the module_init/exit context. Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net')
-rw-r--r--net/netfilter/nf_conntrack_acct.c36
-rw-r--r--net/netfilter/nf_conntrack_core.c15
2 files changed, 24 insertions, 27 deletions
diff --git a/net/netfilter/nf_conntrack_acct.c b/net/netfilter/nf_conntrack_acct.c
index 7df424e2d10c..2d3030ab5b61 100644
--- a/net/netfilter/nf_conntrack_acct.c
+++ b/net/netfilter/nf_conntrack_acct.c
@@ -106,36 +106,26 @@ static void nf_conntrack_acct_fini_sysctl(struct net *net)
106} 106}
107#endif 107#endif
108 108
109int nf_conntrack_acct_init(struct net *net) 109int nf_conntrack_acct_pernet_init(struct net *net)
110{ 110{
111 int ret;
112
113 net->ct.sysctl_acct = nf_ct_acct; 111 net->ct.sysctl_acct = nf_ct_acct;
112 return nf_conntrack_acct_init_sysctl(net);
113}
114 114
115 if (net_eq(net, &init_net)) { 115void nf_conntrack_acct_pernet_fini(struct net *net)
116 ret = nf_ct_extend_register(&acct_extend); 116{
117 if (ret < 0) { 117 nf_conntrack_acct_fini_sysctl(net);
118 printk(KERN_ERR "nf_conntrack_acct: Unable to register extension\n"); 118}
119 goto out_extend_register;
120 }
121 }
122 119
123 ret = nf_conntrack_acct_init_sysctl(net); 120int nf_conntrack_acct_init(void)
121{
122 int ret = nf_ct_extend_register(&acct_extend);
124 if (ret < 0) 123 if (ret < 0)
125 goto out_sysctl; 124 pr_err("nf_conntrack_acct: Unable to register extension\n");
126
127 return 0;
128
129out_sysctl:
130 if (net_eq(net, &init_net))
131 nf_ct_extend_unregister(&acct_extend);
132out_extend_register:
133 return ret; 125 return ret;
134} 126}
135 127
136void nf_conntrack_acct_fini(struct net *net) 128void nf_conntrack_acct_fini(void)
137{ 129{
138 nf_conntrack_acct_fini_sysctl(net); 130 nf_ct_extend_unregister(&acct_extend);
139 if (net_eq(net, &init_net))
140 nf_ct_extend_unregister(&acct_extend);
141} 131}
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index a3cca572412c..f4c6d4a06a1a 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -1348,6 +1348,7 @@ void nf_conntrack_cleanup_end(void)
1348#ifdef CONFIG_NF_CONNTRACK_ZONES 1348#ifdef CONFIG_NF_CONNTRACK_ZONES
1349 nf_ct_extend_unregister(&nf_ct_zone_extend); 1349 nf_ct_extend_unregister(&nf_ct_zone_extend);
1350#endif 1350#endif
1351 nf_conntrack_acct_fini();
1351 nf_conntrack_expect_fini(); 1352 nf_conntrack_expect_fini();
1352} 1353}
1353 1354
@@ -1378,7 +1379,7 @@ void nf_conntrack_cleanup_net(struct net *net)
1378 nf_conntrack_timeout_fini(net); 1379 nf_conntrack_timeout_fini(net);
1379 nf_conntrack_ecache_fini(net); 1380 nf_conntrack_ecache_fini(net);
1380 nf_conntrack_tstamp_fini(net); 1381 nf_conntrack_tstamp_fini(net);
1381 nf_conntrack_acct_fini(net); 1382 nf_conntrack_acct_pernet_fini(net);
1382 nf_conntrack_expect_pernet_fini(net); 1383 nf_conntrack_expect_pernet_fini(net);
1383 kmem_cache_destroy(net->ct.nf_conntrack_cachep); 1384 kmem_cache_destroy(net->ct.nf_conntrack_cachep);
1384 kfree(net->ct.slabname); 1385 kfree(net->ct.slabname);
@@ -1507,6 +1508,10 @@ int nf_conntrack_init_start(void)
1507 if (ret < 0) 1508 if (ret < 0)
1508 goto err_expect; 1509 goto err_expect;
1509 1510
1511 ret = nf_conntrack_acct_init();
1512 if (ret < 0)
1513 goto err_acct;
1514
1510#ifdef CONFIG_NF_CONNTRACK_ZONES 1515#ifdef CONFIG_NF_CONNTRACK_ZONES
1511 ret = nf_ct_extend_register(&nf_ct_zone_extend); 1516 ret = nf_ct_extend_register(&nf_ct_zone_extend);
1512 if (ret < 0) 1517 if (ret < 0)
@@ -1524,8 +1529,10 @@ int nf_conntrack_init_start(void)
1524 1529
1525#ifdef CONFIG_NF_CONNTRACK_ZONES 1530#ifdef CONFIG_NF_CONNTRACK_ZONES
1526err_extend: 1531err_extend:
1527 nf_conntrack_expect_fini(); 1532 nf_conntrack_acct_fini();
1528#endif 1533#endif
1534err_acct:
1535 nf_conntrack_expect_fini();
1529err_expect: 1536err_expect:
1530 return ret; 1537 return ret;
1531} 1538}
@@ -1586,7 +1593,7 @@ int nf_conntrack_init_net(struct net *net)
1586 ret = nf_conntrack_expect_pernet_init(net); 1593 ret = nf_conntrack_expect_pernet_init(net);
1587 if (ret < 0) 1594 if (ret < 0)
1588 goto err_expect; 1595 goto err_expect;
1589 ret = nf_conntrack_acct_init(net); 1596 ret = nf_conntrack_acct_pernet_init(net);
1590 if (ret < 0) 1597 if (ret < 0)
1591 goto err_acct; 1598 goto err_acct;
1592 ret = nf_conntrack_tstamp_init(net); 1599 ret = nf_conntrack_tstamp_init(net);
@@ -1622,7 +1629,7 @@ err_timeout:
1622err_ecache: 1629err_ecache:
1623 nf_conntrack_tstamp_fini(net); 1630 nf_conntrack_tstamp_fini(net);
1624err_tstamp: 1631err_tstamp:
1625 nf_conntrack_acct_fini(net); 1632 nf_conntrack_acct_pernet_fini(net);
1626err_acct: 1633err_acct:
1627 nf_conntrack_expect_pernet_fini(net); 1634 nf_conntrack_expect_pernet_fini(net);
1628err_expect: 1635err_expect: