diff -u -r1.1.1.2 ip_conntrack_core.c --- a/net/ipv4/netfilter/ip_conntrack_core.c 4 Sep 2004 17:33:46 -0000 1.1.1.2 +++ b/net/ipv4/netfilter/ip_conntrack_core.c 18 Sep 2004 18:59:07 -0000 @@ -1162,14 +1162,13 @@ ct->timeout.expires = extra_jiffies; ct_add_counters(ct, ctinfo, skb); } else { - WRITE_LOCK(&ip_conntrack_lock); - /* Need del_timer for race avoidance (may already be dying). */ - if (del_timer(&ct->timeout)) { - ct->timeout.expires = jiffies + extra_jiffies; - add_timer(&ct->timeout); - } + /* In 2.6 you can use mod_timer to add some extra jiffies + * to an active timer, see kernel/timer.c. Even better, we + * don't need to lock the conntrack table because mod_timer + * takes care about a possible concurrent update, this + * kills a pretty bottleneck ;-) */ + mod_timer(&ct->timeout, jiffies + extra_jiffies); ct_add_counters(ct, ctinfo, skb); - WRITE_UNLOCK(&ip_conntrack_lock); } }