diff mbox series

[ovs-dev] compat: Fix for the packet loop issue in vxlan

Message ID 1526971719-3715-1-git-send-email-neelugaddam@gmail.com
State Superseded
Headers show
Series [ovs-dev] compat: Fix for the packet loop issue in vxlan | expand

Commit Message

Neelakantam Gaddam May 22, 2018, 6:48 a.m. UTC
This patch fixes the kernel soft lockup issue with vxlan configuration where
the tunneled packet is sent on the same bridge where vxlan port is attched to.
It detects the loop in vxlan xmit functionb and drops if loop is detected.

Signed-off-by: Neelakantam Gaddam <neelugaddam@gmail.com>
---
 datapath/linux/compat/vxlan.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Gregory Rose May 22, 2018, 6:06 p.m. UTC | #1
On 5/21/2018 11:48 PM, Neelakantam Gaddam wrote:
> This patch fixes the kernel soft lockup issue with vxlan configuration where
> the tunneled packet is sent on the same bridge where vxlan port is attched to.
> It detects the loop in vxlan xmit functionb and drops if loop is detected.
>
> Signed-off-by: Neelakantam Gaddam <neelugaddam@gmail.com>

The patch has a white space error:
Applying patch #918026 using 'git am'
Description: [ovs-dev] compat: Fix for the packet loop issue in vxlan
Applying: compat: Fix for the packet loop issue in vxlan
/home/gvrose/prj/ovs-experimental/.git/rebase-apply/patch:14: trailing 
whitespace.
                 if ((rt->dst.dev == dev) ||
warning: 1 line adds whitespace errors.

Also, the subject line might be better with "vxlan: Fix for the packet 
loop issue in vxlan"

Other than that seems fine and tested out OK.  The maintainer may choose 
to ask you to send  V2 or
might just fix up the subject line and white space error and commit, 
that's their prerogative.

Tested-by: Greg Rose <gvrose8192@gmail.com>
Reviewed-by: Greg Rose <gvrose8192@gmail.com>

> ---
>   datapath/linux/compat/vxlan.c | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/datapath/linux/compat/vxlan.c b/datapath/linux/compat/vxlan.c
> index d27a5e2..0f4034f 100644
> --- a/datapath/linux/compat/vxlan.c
> +++ b/datapath/linux/compat/vxlan.c
> @@ -1115,7 +1115,8 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
>   			goto tx_error;
>   		}
>   
> -		if (rt->dst.dev == dev) {
> +		if ((rt->dst.dev == dev) ||
> +		    (OVS_CB(skb)->input_vport->dev == rt->dst.dev)) {
>   			netdev_dbg(dev, "circular route to %pI4\n",
>   				   &dst->sin.sin_addr.s_addr);
>   			dev->stats.collisions++;
> @@ -1174,7 +1175,8 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
>   			goto tx_error;
>   		}
>   
> -		if (ndst->dev == dev) {
> +		if ((ndst->dev == dev) ||
> +		    (OVS_CB(skb)->input_vport->dev == ndst->dev)) {
>   			netdev_dbg(dev, "circular route to %pI6\n",
>   				   &dst->sin6.sin6_addr);
>   			dst_release(ndst);
Neelakantam Gaddam May 23, 2018, 6:49 a.m. UTC | #2
Hi Greg,

I have sent the patch in another mail with the suggested changes.


On Tue, May 22, 2018 at 11:36 PM, Gregory Rose <gvrose8192@gmail.com> wrote:

> On 5/21/2018 11:48 PM, Neelakantam Gaddam wrote:
>
>> This patch fixes the kernel soft lockup issue with vxlan configuration
>> where
>> the tunneled packet is sent on the same bridge where vxlan port is
>> attched to.
>> It detects the loop in vxlan xmit functionb and drops if loop is detected.
>>
>> Signed-off-by: Neelakantam Gaddam <neelugaddam@gmail.com>
>>
>
> The patch has a white space error:
> Applying patch #918026 using 'git am'
> Description: [ovs-dev] compat: Fix for the packet loop issue in vxlan
> Applying: compat: Fix for the packet loop issue in vxlan
> /home/gvrose/prj/ovs-experimental/.git/rebase-apply/patch:14: trailing
> whitespace.
>                 if ((rt->dst.dev == dev) ||
> warning: 1 line adds whitespace errors.
>
> Also, the subject line might be better with "vxlan: Fix for the packet
> loop issue in vxlan"
>
> Other than that seems fine and tested out OK.  The maintainer may choose
> to ask you to send  V2 or
> might just fix up the subject line and white space error and commit,
> that's their prerogative.
>
> Tested-by: Greg Rose <gvrose8192@gmail.com>
> Reviewed-by: Greg Rose <gvrose8192@gmail.com>
>
>
> ---
>>   datapath/linux/compat/vxlan.c | 6 ++++--
>>   1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/datapath/linux/compat/vxlan.c b/datapath/linux/compat/vxlan.
>> c
>> index d27a5e2..0f4034f 100644
>> --- a/datapath/linux/compat/vxlan.c
>> +++ b/datapath/linux/compat/vxlan.c
>> @@ -1115,7 +1115,8 @@ static void vxlan_xmit_one(struct sk_buff *skb,
>> struct net_device *dev,
>>                         goto tx_error;
>>                 }
>>   -             if (rt->dst.dev == dev) {
>> +               if ((rt->dst.dev == dev) ||
>> +                   (OVS_CB(skb)->input_vport->dev == rt->dst.dev)) {
>>                         netdev_dbg(dev, "circular route to %pI4\n",
>>                                    &dst->sin.sin_addr.s_addr);
>>                         dev->stats.collisions++;
>> @@ -1174,7 +1175,8 @@ static void vxlan_xmit_one(struct sk_buff *skb,
>> struct net_device *dev,
>>                         goto tx_error;
>>                 }
>>   -             if (ndst->dev == dev) {
>> +               if ((ndst->dev == dev) ||
>> +                   (OVS_CB(skb)->input_vport->dev == ndst->dev)) {
>>                         netdev_dbg(dev, "circular route to %pI6\n",
>>                                    &dst->sin6.sin6_addr);
>>                         dst_release(ndst);
>>
>
>
diff mbox series

Patch

diff --git a/datapath/linux/compat/vxlan.c b/datapath/linux/compat/vxlan.c
index d27a5e2..0f4034f 100644
--- a/datapath/linux/compat/vxlan.c
+++ b/datapath/linux/compat/vxlan.c
@@ -1115,7 +1115,8 @@  static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
 			goto tx_error;
 		}
 
-		if (rt->dst.dev == dev) {
+		if ((rt->dst.dev == dev) || 
+		    (OVS_CB(skb)->input_vport->dev == rt->dst.dev)) {
 			netdev_dbg(dev, "circular route to %pI4\n",
 				   &dst->sin.sin_addr.s_addr);
 			dev->stats.collisions++;
@@ -1174,7 +1175,8 @@  static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
 			goto tx_error;
 		}
 
-		if (ndst->dev == dev) {
+		if ((ndst->dev == dev) ||
+		    (OVS_CB(skb)->input_vport->dev == ndst->dev)) {
 			netdev_dbg(dev, "circular route to %pI6\n",
 				   &dst->sin6.sin6_addr);
 			dst_release(ndst);