From: Rusty Russell <rusty@rustcorp.com.au>

ip_conntrack_put can be called in any context in theory: in particular,
MASQUERADE will can call it (via ip_ct_selective_cleanup) when an interface
comes up with a different address.

Move the CONNTRACK_STAT_INC inside the lock: it needs preemption disabled.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/net/ipv4/netfilter/ip_conntrack_core.c |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)

diff -puN net/ipv4/netfilter/ip_conntrack_core.c~avoid-warning-on-conntrack_stat_inc-in-destroy_conntrack net/ipv4/netfilter/ip_conntrack_core.c
--- 25/net/ipv4/netfilter/ip_conntrack_core.c~avoid-warning-on-conntrack_stat_inc-in-destroy_conntrack	2004-10-26 19:57:13.474112576 -0700
+++ 25-akpm/net/ipv4/netfilter/ip_conntrack_core.c	2004-10-26 19:57:13.478111968 -0700
@@ -312,6 +312,7 @@ destroy_conntrack(struct nf_conntrack *n
 		}
 		kmem_cache_free(ip_conntrack_expect_cachep, ct->master);
 	}
+	CONNTRACK_STAT_INC(delete);
 	WRITE_UNLOCK(&ip_conntrack_lock);
 
 	if (master)
@@ -320,7 +321,6 @@ destroy_conntrack(struct nf_conntrack *n
 	DEBUGP("destroy_conntrack: returning ct=%p to slab\n", ct);
 	kmem_cache_free(ip_conntrack_cachep, ct);
 	atomic_dec(&ip_conntrack_count);
-	CONNTRACK_STAT_INC(delete);
 }
 
 static void death_by_timeout(unsigned long ul_conntrack)
_