Signed-off-by: Vasily Averin <vvs@xxxxxxxxxx> --- net/ipv4/netfilter/nf_defrag_ipv4.c | 32 +++++++++++++++++++++++++++++++- 1 files changed, 31 insertions(+), 1 deletions(-) diff --git a/net/ipv4/netfilter/nf_defrag_ipv4.c b/net/ipv4/netfilter/nf_defrag_ipv4.c index f40f321..f82685c 100644 --- a/net/ipv4/netfilter/nf_defrag_ipv4.c +++ b/net/ipv4/netfilter/nf_defrag_ipv4.c @@ -110,14 +110,44 @@ static struct nf_hook_ops ipv4_defrag_ops[] = { }, }; +static int nf_defrag_ipv4_net_init(struct net *net) +{ + atomic_set(&net->br_defrag_ipv4_users_count, 0); + return 0; +} + +static void nf_defrag_ipv4_net_exit(struct net *net) +{ + if (unlikely(atomic_read(&net->br_defrag_ipv4_users_count) != 0)) { + pr_warn("net %p cleanup: br_defrag_users_count = %d\n", + net, atomic_read(&net->br_defrag_ipv4_users_count)); + } +} + +static struct pernet_operations nf_defrag_ipv4_net_ops = { + .init = nf_defrag_ipv4_net_init, + .exit = nf_defrag_ipv4_net_exit, +}; + static int __init nf_defrag_init(void) { - return nf_register_hooks(ipv4_defrag_ops, ARRAY_SIZE(ipv4_defrag_ops)); + int ret = 0; + + ret = register_pernet_subsys(&nf_defrag_ipv4_net_ops); + if (ret) + goto out; + + ret = nf_register_hooks(ipv4_defrag_ops, ARRAY_SIZE(ipv4_defrag_ops)); + if (ret) + unregister_pernet_subsys(&nf_defrag_ipv4_net_ops); +out: + return ret; } static void __exit nf_defrag_fini(void) { nf_unregister_hooks(ipv4_defrag_ops, ARRAY_SIZE(ipv4_defrag_ops)); + unregister_pernet_subsys(&nf_defrag_ipv4_net_ops); } void nf_defrag_ipv4_enable(void) -- 1.7.5.4 -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html