From: David S. Miller Date: Tue, 15 Jul 2008 03:23:54 +0000 (-0700) Subject: Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=2aec609fb45e84d65bc8eabc7b650bbecb1cc179;p=openwrt%2Fstaging%2Fblogic.git Merge branch 'master' of /linux/kernel/git/davem/net-2.6 Conflicts: net/netfilter/nf_conntrack_proto_tcp.c --- 2aec609fb45e84d65bc8eabc7b650bbecb1cc179 diff --cc net/netfilter/nf_conntrack_proto_tcp.c index 740acd6bc7d9,dd28fb239a60..420a10d8eb1e --- a/net/netfilter/nf_conntrack_proto_tcp.c +++ b/net/netfilter/nf_conntrack_proto_tcp.c @@@ -844,8 -844,15 +844,14 @@@ static int tcp_packet(struct nf_conn *c /* Attempt to reopen a closed/aborted connection. * Delete this connection and look up again. */ write_unlock_bh(&tcp_lock); - nf_ct_kill(ct); - return -NF_REPEAT; ++ + /* Only repeat if we can actually remove the timer. + * Destruction may already be in progress in process + * context and we must give it a chance to terminate. + */ - if (del_timer(&ct->timeout)) { - ct->timeout.function((unsigned long)ct); ++ if (nf_ct_kill(ct)) + return -NF_REPEAT; - } + return -NF_DROP; } /* Fall through */ case TCP_CONNTRACK_IGNORE: