On Tue, Jun 12, 2018 at 10:11 AM, Neelakantam Gaddam <neelugad...@gmail.com> wrote: > > Hi Pravin, > > The below configuration is causing the spinlock recursion issue. > > I am able to see the issue with below configuration. > > > > ovs-vsctl add-br br0 > > ovs-vsctl add-bond br0 bond0 p1p1 p1p2 > > ovs-vsctl set port bond0 lacp=active bond_mode=balance-tcp > > ifconfig br0 100.0.0.1 up > > ovs-vsctl add-port br0 veth0 > > ovs-vsctl add-port br0 vx0 -- set interface vx0 type=vxlan > options:local_ip=100.0.0.1 options:remote_ip=100.0.0.2 option:key=flow > > > > ovs-ofctl add-flow br0 "table=0, priority=1, cookie=100, tun_id=100, > in_port=4, action=output:3" > > ovs-ofctl add-flow br0 "table=0, priority=1, cookie=100, in_port=3, > actions=set_field:100->tun_id output:4" > > > > The same bridge br0 is being used as the local interface for vxlan tunnel. > Even though this configuration is invalid, we should not see the kernel crash. >
I agree this should not cause crash. Can you post the crash or investigate why it is crashing I think such configuration would hit the networking stack recursion limit (XMIT_RECURSION_LIMIT) and then the packet would be dropped. I am not sure which spinlock recursion issue you are referring to. > > > > > On Tue, Jun 12, 2018 at 11:55 AM, Pravin Shelar <pshe...@ovn.org> wrote: >> >> >> >> On Tue, May 22, 2018 at 10:16 PM, Neelakantam Gaddam <neelugad...@gmail.com> >> 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 <neelugad...@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 287dad2..00562fa 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)) { >> >> >> I am not sure which case the OVS_CB(skb)->input_vport->dev is not same as >> the dev when there is recursion. Can you explain how to reproduce it? >> > > > > -- > Thanks & Regards > Neelakantam Gaddam _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev