Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP3:GA
openvswitch.11325
0001-datapath-backport-tunnels-Remove-encapsula...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-datapath-backport-tunnels-Remove-encapsulation-offlo.patch of Package openvswitch.11325
From 765f7d8b037bd8cff7bc7cdff5215a90dedc8e9f Mon Sep 17 00:00:00 2001 From: Pravin B Shelar <pshelar@ovn.org> Date: Thu, 7 Jul 2016 21:46:11 -0700 Subject: [PATCH] datapath: backport: tunnels: Remove encapsulation offloads on decap. Following patch backports updated iptunnel pull function. Also brings in following upstream fix: commit a09a4c8dd1ec7f830e1fb9e59eb72bddc965d168 Author: Jesse Gross <jesse@kernel.org> tunnels: Remove encapsulation offloads on decap. If a packet is either locally encapsulated or processed through GRO it is marked with the offloads that it requires. However, when it is decapsulated these tunnel offload indications are not removed. This means that if we receive an encapsulated TCP packet, aggregate it with GRO, decapsulate, and retransmit the resulting frame on a NIC that does not support encapsulation, we won't be able to take advantage of hardware offloads even though it is just a simple TCP packet at this point. This fixes the problem by stripping off encapsulation offload indications when packets are decapsulated. The performance impacts of this bug are significant. In a test where a Geneve encapsulated TCP stream is sent to a hypervisor, GRO'ed, decapsulated, and bridged to a VM performance is improved by 60% (5Gbps->8Gbps) as a result of avoiding unnecessary segmentation at the VM tap interface. Reported-by: Ramu Ramamurthy <sramamur@linux.vnet.ibm.com> Fixes: 68c33163 ("v4 GRE: Add TCP segmentation offload for GRE") Signed-off-by: Jesse Gross <jesse@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Pravin B Shelar <pshelar@ovn.org> Acked-by: Jesse Gross <jesse@kernel.org> --- datapath/linux/compat/include/net/ip_tunnels.h | 15 +++++++++++++++ datapath/linux/compat/ip_tunnels_core.c | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/datapath/linux/compat/include/net/ip_tunnels.h b/datapath/linux/compat/include/net/ip_tunnels.h index 5eda8a2..01271f8 100644 --- a/datapath/linux/compat/include/net/ip_tunnels.h +++ b/datapath/linux/compat/include/net/ip_tunnels.h @@ -333,4 +333,19 @@ struct net *rpl_ip_tunnel_get_link_net(const struct net_device *dev); int rpl___ip_tunnel_change_mtu(struct net_device *dev, int new_mtu, bool strict); #endif +static inline int iptunnel_pull_offloads(struct sk_buff *skb) +{ + if (skb_is_gso(skb)) { + int err; + + err = skb_unclone(skb, GFP_ATOMIC); + if (unlikely(err)) + return err; + skb_shinfo(skb)->gso_type &= ~(NETIF_F_GSO_ENCAP_ALL >> + NETIF_F_GSO_SHIFT); + } + + skb->encapsulation = 0; + return 0; +} #endif /* __NET_IP_TUNNELS_H */ diff --git a/datapath/linux/compat/ip_tunnels_core.c b/datapath/linux/compat/ip_tunnels_core.c index 179fa47..029fca6 100644 --- a/datapath/linux/compat/ip_tunnels_core.c +++ b/datapath/linux/compat/ip_tunnels_core.c @@ -170,7 +170,8 @@ int rpl_iptunnel_pull_header(struct sk_buff *skb, int hdr_len, __be16 inner_prot vlan_set_tci(skb, 0); skb_set_queue_mapping(skb, 0); skb->pkt_type = PACKET_HOST; - return 0; + + return iptunnel_pull_offloads(skb); } EXPORT_SYMBOL_GPL(rpl_iptunnel_pull_header); -- 2.10.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor