Fix TUN performance regression (rhbz 1093931)

This commit is contained in:
Josh Boyer 2014-05-03 10:28:45 -04:00
parent eec70ea731
commit 001ef40b86
2 changed files with 55 additions and 0 deletions

View File

@ -760,6 +760,9 @@ Patch25070: 0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch
#rhbz 1060327
Patch25071: drm-fix-qxl-mode-flags-backport.patch
#rhbz 1093931
Patch25073: net-Start-with-correct-mac_len-in-skb_network_protoc.patch
# END OF PATCH DEFINITIONS
%endif
@ -1473,6 +1476,9 @@ ApplyPatch 0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch
#rhbz 1060327
ApplyPatch drm-fix-qxl-mode-flags-backport.patch
#rhbz 1093931
ApplyPatch net-Start-with-correct-mac_len-in-skb_network_protoc.patch
# END OF PATCH APPLICATIONS
%endif
@ -2285,6 +2291,7 @@ fi
# || ||
%changelog
* Sat May 03 2014 Josh Boyer <jwboyer@fedoraproject.org>
- Fix TUN performance regression (rhbz 1093931)
- Add patch to fix HID rmi driver from Benjamin Tissoires (rhbz 1090161)
* Thu May 01 2014 Josh Boyer <jwboyer@fedoraproject.org>

View File

@ -0,0 +1,48 @@
Bugzilla: 1093931
Upstream-status: 3.15 and queued for stable (3.14.y only)
From 1e785f48d29a09b6cf96db7b49b6320dada332e1 Mon Sep 17 00:00:00 2001
From: Vlad Yasevich <vyasevic@redhat.com>
Date: Mon, 14 Apr 2014 17:37:26 -0400
Subject: [PATCH] net: Start with correct mac_len in skb_network_protocol
Sometimes, when the packet arrives at skb_mac_gso_segment()
its skb->mac_len already accounts for some of the mac lenght
headers in the packet. This seems to happen when forwarding
through and OpenSSL tunnel.
When we start looking for any vlan headers in skb_network_protocol()
we seem to ignore any of the already known mac headers and start
with an ETH_HLEN. This results in an incorrect offset, dropped
TSO frames and general slowness of the connection.
We can start counting from the known skb->mac_len
and return at least that much if all mac level headers
are known and accounted for.
Fixes: 53d6471cef17262d3ad1c7ce8982a234244f68ec (net: Account for all vlan headers in skb_mac_gso_segment)
CC: Eric Dumazet <eric.dumazet@gmail.com>
CC: Daniel Borkman <dborkman@redhat.com>
Tested-by: Martin Filip <nexus+kernel@smoula.net>
Signed-off-by: Vlad Yasevich <vyasevic@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
net/core/dev.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/core/dev.c b/net/core/dev.c
index 14dac0654f28..5b3042e69f85 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2284,7 +2284,7 @@ EXPORT_SYMBOL(skb_checksum_help);
__be16 skb_network_protocol(struct sk_buff *skb, int *depth)
{
__be16 type = skb->protocol;
- int vlan_depth = ETH_HLEN;
+ int vlan_depth = skb->mac_len;
/* Tunnel gso handlers can set protocol to ethernet. */
if (type == htons(ETH_P_TEB)) {
--
1.9.0