[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