Subject: Re: ucc_geth: nf_conntrack: table full, dropping packet.

From: Eric Dumazet <[email-masked]>
Date: Mon, 23 Mar 2009 19:08:42 +0100

Joakim Tjernlund a écrit :
> Eric Dumazet <[email-masked]> wrote on 23/03/2009 18:49:38:
> 
>> Joakim Tjernlund a écrit :
>>> Patrick McHardy <[email-masked]> wrote on 23/03/2009 13:29:33:
>>>
>>>> Joakim Tjernlund wrote:
>>>>> Patrick McHardy <[email-masked]> wrote on 23/03/2009 13:15:45:
>>>>>> Joakim Tjernlund wrote:
>>>>>>> doing a "ping -f -l 3" on my host towards my board on linus tree 
> as 
>>> of 
>>>>>>> Friday results in lots of:
>>>>>>> nf_conntrack: table full, dropping packet.
>>>>>>> nf_conntrack: table full, dropping packet.
>>>>>>> nf_conntrack: table full, dropping packet.
>>>>>>> __ratelimit: 11 callbacks suppressed
>>>>>>> nf_conntrack: table full, dropping packet.
>>>>>>> nf_conntrack: table full, dropping packet.
>>>>>>> nf_conntrack: table full, dropping packet.
>>>>>>> nf_conntrack: table full, dropping packet.
>>>>>>>
>>>>>>> for ucc_geth on a MPC832x.
>>>>>>> This really looks strange to me, ideas?
>>>>>> What does /proc/net/netfilter/nf_conntrack show?
>>>>> There is no /proc/net/netfilter/nf_conntrack. There is a
>>>>> /proc/net/nf_conntrack though and it is empty. If I telnet
>>>>> to the board I see:
>>>> That means that something is leaking conntrack references, most 
> likely
>>>> by leaking skbs. Since I haven't seen any other reports, my guess 
> would
>>>> be the ucc_geth driver.
>>>>
>>> Mucking around with the ucc_geth driver I found that if I:
>>>  - Move TX from IRQ to NAPI context
>>>  - double the weight.
>>>  - after booting up, wait a few mins until the JFFS2 GC kernel thread 
> has 
>>> stopped
>>>    scanning the FS 
>>>
>>> Then the "nf_conntrack: table full, dropping packet." msgs stops.
>>> Does this seem right to you guys?
>>>
>> How many cpus do you have ?
> 
> Just one, it is an embedded board running at 266 MHz
> 
>> What kernel version do you use ?
> 
> Linus tree as of Friday
> 
>

I suspect RCU problem. Maybe the GC kernel threads blocks synchronize_rcu() ?