On Tue, Jul 5, 2016 at 12:07 PM, Jesse Gross <je...@kernel.org> wrote: > I guess it's not applicable in the sense that the fix is not really in > OVS. Kernels with that bug will continue to have it even after this > backport. > > I think it would be pretty challenging to fully backport this through > the OVS tree - it would likely require pulling in the whole UDP > offloads module. That would pretty messy and would silently prevent > other non-OVS users from taking advantage of offloads. To the extent > that this affects OVS users, I think probably needs to be picked up by > distribution kernels. >
Loadable module can not change kernel udp_gro_complete(), so I can not backport it into OVS. Anyways setting inner mac header is still improvement, if distributions back port whole commit. > On Mon, Jul 4, 2016 at 4:02 AM, Jarno Rajahalme <ja...@ovn.org> wrote: >> I'm not really familiar with these backports, but is it so that the main >> change the upstream patch introduced to udp_gro_complete() is not applicable >> to the backports? >> >> Jarno >> >>> On Jun 30, 2016, at 1:06 AM, Pravin B Shelar <pshe...@ovn.org> wrote: >>> >>> Upstream commit: >>> commit 229740c63169462a838a8b8e16391ed000934631 >>> Author: Jarno Rajahalme <ja...@ovn.org> >>> >>> udp_offload: Set encapsulation before inner completes. >>> >>> UDP tunnel segmentation code relies on the inner offsets being set for >>> an UDP tunnel GSO packet, but the inner *_complete() functions will >>> set the inner offsets only if 'encapsulation' is set before calling >>> them. Currently, udp_gro_complete() sets 'encapsulation' only after >>> the inner *_complete() functions are done. This causes the inner >>> offsets having invalid values after udp_gro_complete() returns, which >>> in turn will make it impossible to properly segment the packet in case >>> it needs to be forwarded, which would be visible to the user either as >>> invalid packets being sent or as packet loss. >>> >>> This patch fixes this by setting skb's 'encapsulation' in >>> udp_gro_complete() before calling into the inner complete functions, >>> and by making each possible UDP tunnel gro_complete() callback set the >>> inner_mac_header to the beginning of the tunnel payload. >>> >>> Signed-off-by: Jarno Rajahalme <ja...@ovn.org> >>> Reviewed-by: Alexander Duyck <adu...@mirantis.com> >>> Signed-off-by: David S. Miller <da...@davemloft.net> >>> >>> Signed-off-by: Pravin B Shelar <pshe...@ovn.org> >>> --- >>> datapath/linux/compat/geneve.c | 2 ++ >>> 1 file changed, 2 insertions(+) >>> >>> diff --git a/datapath/linux/compat/geneve.c b/datapath/linux/compat/geneve.c >>> index e049221..cc8740b 100644 >>> --- a/datapath/linux/compat/geneve.c >>> +++ b/datapath/linux/compat/geneve.c >>> @@ -566,6 +566,8 @@ static int geneve_gro_complete(struct sk_buff *skb, int >>> nhoff, >>> err = ptype->callbacks.gro_complete(skb, nhoff + gh_len); >>> >>> rcu_read_unlock(); >>> + >>> + skb_set_inner_mac_header(skb, nhoff + gh_len); >>> return err; >>> } >>> #endif >>> -- >>> 1.9.1 >>> >>> _______________________________________________ >>> dev mailing list >>> dev@openvswitch.org >>> http://openvswitch.org/mailman/listinfo/dev >> >> _______________________________________________ >> dev mailing list >> dev@openvswitch.org >> http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev