From: Rusty Russell <rusty@xxxxxxxxxxxxxxx>
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@xxxxxxxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxx>
---
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-28 00:17:08.778469456 -0700
+++ 25-akpm/net/ipv4/netfilter/ip_conntrack_core.c 2004-10-28
00:17:08.782468848 -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)
_
|