diff options
-rw-r--r-- | net/netfilter/nf_conntrack_core.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c index ebc275600125..55befe59e1c0 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c | |||
@@ -517,16 +517,17 @@ EXPORT_SYMBOL_GPL(nf_conntrack_alloc); | |||
517 | static void nf_conntrack_free_rcu(struct rcu_head *head) | 517 | static void nf_conntrack_free_rcu(struct rcu_head *head) |
518 | { | 518 | { |
519 | struct nf_conn *ct = container_of(head, struct nf_conn, rcu); | 519 | struct nf_conn *ct = container_of(head, struct nf_conn, rcu); |
520 | struct net *net = nf_ct_net(ct); | ||
521 | 520 | ||
522 | nf_ct_ext_free(ct); | 521 | nf_ct_ext_free(ct); |
523 | kmem_cache_free(nf_conntrack_cachep, ct); | 522 | kmem_cache_free(nf_conntrack_cachep, ct); |
524 | atomic_dec(&net->ct.count); | ||
525 | } | 523 | } |
526 | 524 | ||
527 | void nf_conntrack_free(struct nf_conn *ct) | 525 | void nf_conntrack_free(struct nf_conn *ct) |
528 | { | 526 | { |
527 | struct net *net = nf_ct_net(ct); | ||
528 | |||
529 | nf_ct_ext_destroy(ct); | 529 | nf_ct_ext_destroy(ct); |
530 | atomic_dec(&net->ct.count); | ||
530 | call_rcu(&ct->rcu, nf_conntrack_free_rcu); | 531 | call_rcu(&ct->rcu, nf_conntrack_free_rcu); |
531 | } | 532 | } |
532 | EXPORT_SYMBOL_GPL(nf_conntrack_free); | 533 | EXPORT_SYMBOL_GPL(nf_conntrack_free); |