Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

netfilter: nf_ct_ecache: 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>

authored by

Gao feng and committed by
Pablo Neira Ayuso
3fe0f943 73f4001a

+39 -32
+15 -4
include/net/netfilter/nf_conntrack_ecache.h
··· 207 207 nf_ct_expect_event_report(event, exp, 0, 0); 208 208 } 209 209 210 - extern int nf_conntrack_ecache_init(struct net *net); 211 - extern void nf_conntrack_ecache_fini(struct net *net); 210 + extern int nf_conntrack_ecache_pernet_init(struct net *net); 211 + extern void nf_conntrack_ecache_pernet_fini(struct net *net); 212 212 213 + extern int nf_conntrack_ecache_init(void); 214 + extern void nf_conntrack_ecache_fini(void); 213 215 #else /* CONFIG_NF_CONNTRACK_EVENTS */ 214 216 215 217 static inline void nf_conntrack_event_cache(enum ip_conntrack_events event, ··· 234 232 u32 portid, 235 233 int report) {} 236 234 237 - static inline int nf_conntrack_ecache_init(struct net *net) 235 + static inline int nf_conntrack_ecache_pernet_init(struct net *net) 238 236 { 239 237 return 0; 240 238 } 241 239 242 - static inline void nf_conntrack_ecache_fini(struct net *net) 240 + static inline void nf_conntrack_ecache_pernet_fini(struct net *net) 241 + { 242 + } 243 + 244 + static inline int nf_conntrack_ecache_init(void) 245 + { 246 + return 0; 247 + } 248 + 249 + static inline void nf_conntrack_ecache_fini(void) 243 250 { 244 251 } 245 252 #endif /* CONFIG_NF_CONNTRACK_EVENTS */
+11 -4
net/netfilter/nf_conntrack_core.c
··· 1348 1348 #ifdef CONFIG_NF_CONNTRACK_ZONES 1349 1349 nf_ct_extend_unregister(&nf_ct_zone_extend); 1350 1350 #endif 1351 + nf_conntrack_ecache_fini(); 1351 1352 nf_conntrack_tstamp_fini(); 1352 1353 nf_conntrack_acct_fini(); 1353 1354 nf_conntrack_expect_fini(); ··· 1379 1378 nf_conntrack_labels_fini(net); 1380 1379 nf_conntrack_helper_fini(net); 1381 1380 nf_conntrack_timeout_fini(net); 1382 - nf_conntrack_ecache_fini(net); 1381 + nf_conntrack_ecache_pernet_fini(net); 1383 1382 nf_conntrack_tstamp_pernet_fini(net); 1384 1383 nf_conntrack_acct_pernet_fini(net); 1385 1384 nf_conntrack_expect_pernet_fini(net); ··· 1518 1517 if (ret < 0) 1519 1518 goto err_tstamp; 1520 1519 1520 + ret = nf_conntrack_ecache_init(); 1521 + if (ret < 0) 1522 + goto err_ecache; 1523 + 1521 1524 #ifdef CONFIG_NF_CONNTRACK_ZONES 1522 1525 ret = nf_ct_extend_register(&nf_ct_zone_extend); 1523 1526 if (ret < 0) ··· 1539 1534 1540 1535 #ifdef CONFIG_NF_CONNTRACK_ZONES 1541 1536 err_extend: 1542 - nf_conntrack_tstamp_fini(); 1537 + nf_conntrack_ecache_fini(); 1543 1538 #endif 1539 + err_ecache: 1540 + nf_conntrack_tstamp_fini(); 1544 1541 err_tstamp: 1545 1542 nf_conntrack_acct_fini(); 1546 1543 err_acct: ··· 1613 1606 ret = nf_conntrack_tstamp_pernet_init(net); 1614 1607 if (ret < 0) 1615 1608 goto err_tstamp; 1616 - ret = nf_conntrack_ecache_init(net); 1609 + ret = nf_conntrack_ecache_pernet_init(net); 1617 1610 if (ret < 0) 1618 1611 goto err_ecache; 1619 1612 ret = nf_conntrack_timeout_init(net); ··· 1639 1632 err_helper: 1640 1633 nf_conntrack_timeout_fini(net); 1641 1634 err_timeout: 1642 - nf_conntrack_ecache_fini(net); 1635 + nf_conntrack_ecache_pernet_fini(net); 1643 1636 err_ecache: 1644 1637 nf_conntrack_tstamp_pernet_fini(net); 1645 1638 err_tstamp:
+13 -24
net/netfilter/nf_conntrack_ecache.c
··· 233 233 } 234 234 #endif /* CONFIG_SYSCTL */ 235 235 236 - int nf_conntrack_ecache_init(struct net *net) 236 + int nf_conntrack_ecache_pernet_init(struct net *net) 237 237 { 238 - int ret; 239 - 240 238 net->ct.sysctl_events = nf_ct_events; 241 239 net->ct.sysctl_events_retry_timeout = nf_ct_events_retry_timeout; 240 + return nf_conntrack_event_init_sysctl(net); 241 + } 242 242 243 - if (net_eq(net, &init_net)) { 244 - ret = nf_ct_extend_register(&event_extend); 245 - if (ret < 0) { 246 - printk(KERN_ERR "nf_ct_event: Unable to register " 247 - "event extension.\n"); 248 - goto out_extend_register; 249 - } 250 - } 243 + void nf_conntrack_ecache_pernet_fini(struct net *net) 244 + { 245 + nf_conntrack_event_fini_sysctl(net); 246 + } 251 247 252 - ret = nf_conntrack_event_init_sysctl(net); 248 + int nf_conntrack_ecache_init(void) 249 + { 250 + int ret = nf_ct_extend_register(&event_extend); 253 251 if (ret < 0) 254 - goto out_sysctl; 255 - 256 - return 0; 257 - 258 - out_sysctl: 259 - if (net_eq(net, &init_net)) 260 - nf_ct_extend_unregister(&event_extend); 261 - out_extend_register: 252 + pr_err("nf_ct_event: Unable to register event extension.\n"); 262 253 return ret; 263 254 } 264 255 265 - void nf_conntrack_ecache_fini(struct net *net) 256 + void nf_conntrack_ecache_fini(void) 266 257 { 267 - nf_conntrack_event_fini_sysctl(net); 268 - if (net_eq(net, &init_net)) 269 - nf_ct_extend_unregister(&event_extend); 258 + nf_ct_extend_unregister(&event_extend); 270 259 }