diff -u linux.orig/net/ipv4/netfilter/ip_conntrack_rtsp.c linux/net/ipv4/netfilter/ip_conntrack_rtsp.c --- linux.orig/net/ipv4/netfilter/ip_conntrack_rtsp.c 1970-01-01 00:00:00.000000000 +0000 +++ linux/net/ipv4/netfilter/ip_conntrack_rtsp.c 2006-01-14 00:00:00.000000000 +0000 @@ -31,7 +31,6 @@ #include #include -#include #include #include @@ -70,7 +69,7 @@ MODULE_PARM_DESC(setup_timeout, "timeout on for unestablished data channels"); static char rtsp_buffer[65536]; -static DECLARE_LOCK(rtsp_buffer_lock); +static DEFINE_SPINLOCK(rtsp_buffer_lock); unsigned int (*ip_nat_rtsp_hook)(struct sk_buff **pskb, enum ip_conntrack_info ctinfo, @@ -338,14 +337,13 @@ expinfo.loport, expinfo.hiport); - exp = ip_conntrack_expect_alloc(); + exp = ip_conntrack_expect_alloc(ct); if (!exp) { ret = NF_DROP; goto out; } //exp->seq = ntohl(tcph->seq) + hdrsoff; /* mark all the headers */ - exp->master = ct; //exp.help.exp_rtsp_info.len = hdrslen; exp->tuple.src.ip = ct->tuplehash[!dir].tuple.src.ip; @@ -369,7 +367,7 @@ ret = ip_nat_rtsp_hook(pskb, ctinfo, &expinfo, exp); else if (ip_conntrack_expect_related(exp) != 0) { INFOP("ip_conntrack_expect_related failed\n"); - ip_conntrack_expect_free(exp); + ip_conntrack_expect_put(exp); ret = NF_DROP; } goto out; @@ -415,7 +413,7 @@ if (dataoff >= (*pskb)->len) return NF_ACCEPT; - LOCK_BH(&rtsp_buffer_lock); + spin_lock_bh(&rtsp_buffer_lock); rb_ptr = skb_header_pointer(*pskb, dataoff, (*pskb)->len - dataoff, rtsp_buffer); BUG_ON(rb_ptr == NULL); @@ -443,7 +441,7 @@ break; } - UNLOCK_BH(&rtsp_buffer_lock); + spin_unlock_bh(&rtsp_buffer_lock); return ret; }