[ovs-dev] ovn: broadcast packets dropped with "drop recirc action"

Ramu Ramamurthy sramamur at linux.vnet.ibm.com
Thu Mar 17 01:45:14 UTC 2016


On 2016-03-16 16:35, Andy Zhou wrote:
> On Wed, Mar 16, 2016 at 4:00 PM, Ramu Ramamurthy <
> sramamur at linux.vnet.ibm.com> wrote:
> 
>> On 2016-03-15 11:16, Andy Zhou wrote:
>> 
>>> On Mon, Mar 14, 2016 at 12:11 PM, Ramu Ramamurthy <
>>> sramamur at linux.vnet.ibm.com> wrote:
>>> 
>>> When a logical switch (localnet) has lots of ports on a hypervisor,
>>>> I find that broadcast packets from one of the ports is only 
>>>> forwarded to
>>>> a subset of the other ports, and the kernel module shows the message 
>>>> -
>>>> "kernel: openvswitch: ovs-system: deferred action limit reached, 
>>>> drop
>>>> recirc action"
>>>> 
>>>> There appears to be a discussion of a related problem and a possible
>>>> patch
>>>> here:
>>>> http://openvswitch.org/pipermail//discuss/2015-October/019168.html
>>>> http://openvswitch.org/pipermail//discuss/2015-October/019198.html
>>>> 
>>> 
>>> 
>>> Thanks for the bug report.
>>> 
>>> Those patches are now dropped since I have not heard back from the 
>>> bug
>>> reporter.
>>> 
>>> I have just posted a potential fix as RFC at:
>>> 
>>> http://openvswitch.org/pipermail/dev/2016-March/067794.html
>>> 
>>> Would you please test it against your set up?  Thanks.
>>> 
>> 
>> I tried the patch in the link above on devstack-with-ovn. The 
>> openvswitch
>> kernel module
>> is rebuilt with the above patch, I find that there is a system hang,
>> when I send the broadcast packet. The same test earlier showed "drop
>> recirc action" errors.
>> 
> 
> Ahh, I see.  Would you please try the following incremental change? 
> Thanks.
> 
>  diff --git a/datapath/actions.c b/datapath/actions.c
> index 3b85eaf..5e81a38 100644
> --- a/datapath/actions.c
> +++ b/datapath/actions.c
> @@ -116,7 +116,7 @@ static struct deferred_action 
> *action_fifo_get(struct
> action
> 
>  static struct deferred_action *action_fifo_put(struct action_fifo 
> *fifo)
>  {
> -       if (fifo->head >= fifo->size - 1) {
> +       if (fifo->head >= fifo->size / sizeof(*fifo->fifo) - 1) {
>                 /* out of fifo buffer space, try to allocate a new fifo
>                  * buffer. */
>                 struct deferred_action *new_fifo;
> 
> 
> 
>> 

thanks Andy, That worked !, I was able to broadcast (udp-dhcp-discovers) 
to 100 ports and
saw no "drop recirc action" errors.




More information about the dev mailing list