[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#630730: marked as done (linux-image-2.6.32: GSO IPv6 issues)



Your message dated Fri, 30 Sep 2011 20:12:51 +0000
with message-id <E1R9jRz-00077k-OR@franck.debian.org>
and subject line Bug#630730: fixed in user-mode-linux 2.6.32-1um-4+37
has caused the Debian Bug report #630730,
regarding linux-image-2.6.32: GSO IPv6 issues
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
630730: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=630730
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: linux-2.6
Version: 2.6.32-34squeeze1
Severity: normal
Tags: patch

Hi,

While performing stress testing on a KVM instance with IPv6, we noticed very
poor performance on IPv6 TCP connections, which basically came down to the bug
fixed by upstream commit 8e1e8a4779cb23c1d9f51e9223795e07ec54d77a[1]. Both, the
host and the guest were running 2.6.32-5-amd64 2.6.32-31 and the host featured
Intel NICs, using e1000e and igb. SSH sessions to the guest from outside would
effectively stall when large output was generated (e.g. ls -lR /) and 
the problem would disappear when disabling virtio_net's gso (modprobe 
virtio_net gso=0) or disabling the host's TSO using ethtool.

Furthermore, while trying to reproduce the behaviour on another system, we
triggered the bug fixed by commit 0aa68271510ae2b221d4b60892103837be63afe4[2],
i.e. a routed (not bridged) KVM instance using virtio-net would not get its GSO
IPv6 packets forwarded to the network, with the same poor performance as above.

After backporting and applying both patches to squeeze's version, IPv6 
performance was restored to the same levels as IPv4 in both cases. You 
can find the backported versions of the patches attached.

Thanks,
Apollon

[1] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=8e1e8a4779cb23c1d9f51e9223795e07ec54d77a
[2] http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=0aa68271510ae2b221d4b60892103837be63afe4


-- Package-specific info:
** Version:
Linux version 2.6.32-5-amd64 (Debian 2.6.32-31) (ben@decadent.org.uk) (gcc version 4.3.5 (Debian 4.3.5-4) ) #1 SMP Mon Mar 7 21:35:22 UTC 2011

** Command line:
BOOT_IMAGE=/vmlinuz-2.6.32-5-amd64 root=/dev/mapper/linux-root ro

** Not tainted
>From d70ca6cd8f33d4cb2fba194fc520232278f0d6a1 Mon Sep 17 00:00:00 2001
From: Sridhar Samudrala <sri@us.ibm.com>
Date: Thu, 16 Jun 2011 15:52:35 +0300
Subject: [PATCH 1/2] net: Fix IPv6 GSO type checks in Intel ethernet drivers

Found this problem when testing IPv6 from a KVM guest to a remote
host via e1000e device on the host.
The following patch fixes the check for IPv6 GSO packet in Intel
ethernet drivers to use skb_is_gso_v6(). SKB_GSO_DODGY is also set
when packets are forwarded from a guest.

Signed-off-by: Sridhar Samudrala <sri@us.ibm.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
 drivers/net/e1000e/netdev.c    |    2 +-
 drivers/net/igb/igb_main.c     |    2 +-
 drivers/net/igbvf/netdev.c     |    2 +-
 drivers/net/ixgbe/ixgbe_main.c |    2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index 4920a4e..92d6621 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -3807,7 +3807,7 @@ static int e1000_tso(struct e1000_adapter *adapter,
 								 0);
 			cmd_length = E1000_TXD_CMD_IP;
 			ipcse = skb_transport_offset(skb) - 1;
-		} else if (skb_shinfo(skb)->gso_type == SKB_GSO_TCPV6) {
+		} else if (skb_is_gso_v6(skb)) {
 			ipv6_hdr(skb)->payload_len = 0;
 			tcp_hdr(skb)->check =
 				~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index 9e3d87a..40dc84c 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -3032,7 +3032,7 @@ static inline int igb_tso_adv(struct igb_adapter *adapter,
 							 iph->daddr, 0,
 							 IPPROTO_TCP,
 							 0);
-	} else if (skb_shinfo(skb)->gso_type == SKB_GSO_TCPV6) {
+	} else if (skb_is_gso_v6(skb)) {
 		ipv6_hdr(skb)->payload_len = 0;
 		tcp_hdr(skb)->check = ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
 						       &ipv6_hdr(skb)->daddr,
diff --git a/drivers/net/igbvf/netdev.c b/drivers/net/igbvf/netdev.c
index 91024a3..d29188f 100644
--- a/drivers/net/igbvf/netdev.c
+++ b/drivers/net/igbvf/netdev.c
@@ -1953,7 +1953,7 @@ static int igbvf_tso(struct igbvf_adapter *adapter,
 		                                         iph->daddr, 0,
 		                                         IPPROTO_TCP,
 		                                         0);
-	} else if (skb_shinfo(skb)->gso_type == SKB_GSO_TCPV6) {
+	} else if (skb_is_gso_v6(skb)) {
 		ipv6_hdr(skb)->payload_len = 0;
 		tcp_hdr(skb)->check = ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
 		                                       &ipv6_hdr(skb)->daddr,
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index a550d37..6810149 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -4881,7 +4881,7 @@ static int ixgbe_tso(struct ixgbe_adapter *adapter,
 			                                         IPPROTO_TCP,
 			                                         0);
 			adapter->hw_tso_ctxt++;
-		} else if (skb_shinfo(skb)->gso_type == SKB_GSO_TCPV6) {
+		} else if (skb_is_gso_v6(skb)) {
 			ipv6_hdr(skb)->payload_len = 0;
 			tcp_hdr(skb)->check =
 			    ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
-- 
1.7.2.5

>From cc775a4f3c7275b0de898be2be245741b5353c8f Mon Sep 17 00:00:00 2001
From: Herbert Xu <herbert@gondor.apana.org.au>
Date: Thu, 16 Jun 2011 17:59:11 +0300
Subject: [PATCH 2/2] ipv6: Add GSO support on forwarding path

Currently we disallow GSO packets on the IPv6 forward path.
This patch fixes this.

Note that I discovered that our existing GSO MTU checks (e.g.,
IPv4 forwarding) are buggy in that they skip the check altogether,
when they really should be checking gso_size + header instead.

I have also been lazy here in that I haven't bothered to segment
the GSO packet by hand before generating an ICMP message.  Someone
should add that to be 100% correct.

Reported-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
---
 net/ipv6/ip6_output.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index eca3ef7..9ad5792 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -510,7 +510,7 @@ int ip6_forward(struct sk_buff *skb)
 		}
 	}
 
-	if (skb->len > dst_mtu(dst)) {
+	if (skb->len > dst_mtu(dst) && !skb_is_gso(skb)) {
 		/* Again, force OUTPUT device used as source address */
 		skb->dev = dst->dev;
 		icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, dst_mtu(dst), skb->dev);
-- 
1.7.2.5


--- End Message ---
--- Begin Message ---
Source: user-mode-linux
Source-Version: 2.6.32-1um-4+37

We believe that the bug you reported is fixed in the latest version of
user-mode-linux, which is due to be installed in the Debian FTP archive:

user-mode-linux_2.6.32-1um-4+37.diff.gz
  to main/u/user-mode-linux/user-mode-linux_2.6.32-1um-4+37.diff.gz
user-mode-linux_2.6.32-1um-4+37.dsc
  to main/u/user-mode-linux/user-mode-linux_2.6.32-1um-4+37.dsc
user-mode-linux_2.6.32-1um-4+37_amd64.deb
  to main/u/user-mode-linux/user-mode-linux_2.6.32-1um-4+37_amd64.deb



A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 630730@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
dann frazier <dannf@debian.org> (supplier of updated user-mode-linux package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@debian.org)


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Format: 1.8
Date: Thu, 29 Sep 2011 20:23:36 -0600
Source: user-mode-linux
Binary: user-mode-linux
Architecture: source amd64
Version: 2.6.32-1um-4+37
Distribution: stable
Urgency: high
Maintainer: User Mode Linux Maintainers <pkg-uml-pkgs@lists.alioth.debian.org>
Changed-By: dann frazier <dannf@debian.org>
Description: 
 user-mode-linux - User-mode Linux (kernel)
Closes: 566522 620848 622259 622745 622997 627700 627702 627704 627705 630730 631465 632778 637659 637848 638656 638956 639425 639426 640650 641232 641419 642380
Changes: 
 user-mode-linux (2.6.32-1um-4+37) stable; urgency=high
 .
   * Rebuild against linux-source-2.6.32 (2.6.32-37):
     * pm: Fix definition of SET_SYSTEM_SLEEP_PM_OPS used in backported drivers
       (fixes FTBFS on ia64)
     * splice: Fix write position in output file (Closes: #641419)
     * PCI: Add definition of pci_pcie_cap(), used in backported e1000e
       (fixes FTBFS on armel, mips, mipsel, sparc)
     * [openvz] cpt: Allow ext4 mounts (Closes: #642380)
     * Add drm change from 2.6.32.41+drm33.18:
       - drm/radeon/kms: fix bad shift in atom iio table parser
     * [opvenz] ptrace: Don't allow to trace a process without memory map.
     * Add drm change from 2.6.32.42+drm33.19, including:
       - drm/i915: Add a no lvds quirk for the Asus EeeBox PC EB1007
       - drm/radeon/kms: fix for radeon on systems >4GB without hardware iommu
     * Add longterm release 2.6.32.43, including:
       - ksm: fix NULL pointer dereference in scan_get_next_rmap_item()
         (CVE-2011-2183)
       - TTY: ldisc, do not close until there are readers
       - uvcvideo: Remove buffers from the queues when freeing
       - inet_diag: fix inet_diag_bc_audit() (CVE-2011-2213)
       - net: filter: Use WARN_RATELIMIT
       - af_packet: prevent information leak
       - ipv6/udp: Use the correct variable to determine non-blocking condition
       - mm: prevent concurrent unmap_mapping_range() on the same inode
       For the complete list of changes, see:
        http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/ChangeLog-2.6.32.43
       and the bug report which this closes: #637848.
     * Add longterm release 2.6.32.42, including:
       - ftrace: Only update the function code on write to filter files
       - kmemleak: Do not return a pointer to an object that kmemleak did not get
       - ext3: Fix fs corruption when make_indexed_dir() fails
       - jbd: fix fsync() tid wraparound bug
       - PCI: allow matching of prefetchable resources to non-prefetchable windows
         (Closes: #637659)
       - loop: handle on-demand devices correctly
       - xhci: Fix full speed bInterval encoding; fix interval calculation for
         FS isoc endpoints (regressions in 2.6.32-34)
       - OHCI: fix regression caused by nVidia shutdown workaround
         (regression in 2.6.32-31)
       - brd: handle on-demand devices correctly
       - xen mmu: fix a race window causing leave_mm BUG()
       - SCSI: Fix oops caused by queue refcounting failure
       - fat: Fix corrupt inode flags when remove ATTR_SYS flag
       - pata_cm64x: fix boot crash on parisc (Closes: #622745, #622997)
       - Revert "iwlagn: Support new 5000 microcode." (Closes: #632778)
       For the complete list of changes, see:
        http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/ChangeLog-2.6.32.42
       and the bug report which this closes: #631465.
     * [vserver] Update patch to 2.6.32.41-vs2.3.0.36.29.7
       - Apply sched changes deferred from 2.6.32.29
     * e1000e: Backport changes up to Linux 2.6.38 (Closes: #627700)
       - Add support for i82567V-4 and i82579
       - Fix support for i82577, i82578 and i82583
     * e1000e: Fix selection of alternate MAC address on device id 0x1060
       (regression in 2.6.34)
     * igb,igbvf: Backport changes up to Linux 3.0.4 (Closes: #627702)
       - Add support for i82576-ET2, i82580, DH89xxCC, i340 and i350
     * r8169: Backport changes up to Linux 3.0.2 (Closes: #627704)
       - Fix support for RTL8102E and RTL8168DP
       - Add support for RTL8105E, RTL8168E and another variant of RTL8168DP
       - Add support for D-Link DGE-530T rev C1
     * tg3,broadcom: Backport changes up to Linux 2.6.38 (Closes: #627705)
       - Add support for BCM5717, BCM5719, BCM57765
       - Add support for BCM50610M and BCM5241 PHYs
       - Fix support for BCM5755
     * Remove net device features from bug reports (Closes: #638956)
     * Revert "net/ipv4: Check for mistakenly passed in non-IPv4 address"
       included in 2.6.32.43, which might break some applications
     * Add longterm release 2.6.32.44, including:
       - NFSv4.1: update nfs4_fattr_bitmap_maxsz
       - hwmon: (max1111) Fix race condition causing NULL pointer exception
       - bridge: send proper message_age in config BPDU
       - USB: OHCI: fix another regression for NVIDIA controllers
         (Closes: #620848)
       - ext3: Fix oops in ext3_try_to_allocate_with_rsv()
       - svcrpc: fix list-corrupting race on nfsd shutdown
       - alpha: fix several security issues (CVE-2011-2208, CVE-2011-2209,
         CVE-2011-2210, CVE-2011-2211)
       - ALSA: sound/core/pcm_compat.c: adjust array index
       - atm: [br2684] allow routed mode operation again
       For the complete list of changes, see:
        http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/ChangeLog-2.6.32.44
       and the bug report which this closes: #639425.
     * Add longterm release 2.6.32.45, including:
       - ALSA: timer - Fix Oops at closing slave timer
       For the complete list of changes, see:
        http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/ChangeLog-2.6.32.45
       and the bug report which this closes: #639426.
     * sched: Work around sched_group::cpu_power == 0 (Ameliorates: #636797)
     * [x86] Revert "x86, hotplug: Use mwait to offline a processor, fix the
       legacy case" (Closes: #622259)
     * Fix bugs in IPv6 forwarding with GRO/GSO (Closes: #630730):
       - e1000e,igb,igbvf,ixgbe: Fix IPv6 GSO type checks
       - ipv6: Add GSO support on forwarding path
     * devpts: correctly check d_alloc_name() return code (Closes: #640650)
     * ipv6: make fragment identifications less predictable (CVE-2011-2699)
     * Add longterm release 2.6.32.46, including:
       - atm: br2864: sent packets truncated in VC routed mode (Closes: #638656)
       - hwmon: (ibmaem) add missing kfree
       - ALSA: snd-usb-caiaq: Correct offset fields of outbound iso_frame_desc
       - ALSA: snd_usb_caiaq: track submitted output urbs
       - futex: Fix regression with read only mappings
       - x86-32, vdso: On system call restart after SYSENTER, use int $0x80
       - fuse: check size of FUSE_NOTIFY_INVAL_ENTRY message
       For the complete list of changes, see:
        http://www.kernel.org/pub/linux/kernel/v2.6/longterm/v2.6.32/ChangeLog-2.6.32.46
       and the bug report which this closes: #641232.
     * drm/ttm: fix ttm_bo_add_ttm(user) failure path
     * 3c503: fix broken IRQ autoprobing (Closes: #566522)
Checksums-Sha1: 
 1869e4e3bd2255256fd88bc2aa88a25d091c7d73 2030 user-mode-linux_2.6.32-1um-4+37.dsc
 73f04e650f2499dd02305298445072482658725e 17952 user-mode-linux_2.6.32-1um-4+37.diff.gz
 2bb102c3be4aa861b343fe0c23e82774ebd67ecc 7079528 user-mode-linux_2.6.32-1um-4+37_amd64.deb
Checksums-Sha256: 
 eed0a5cfbe40d929734f9d69eb92582b93c637ccf943ecc7bdcd6879cb372d6a 2030 user-mode-linux_2.6.32-1um-4+37.dsc
 ebf8970ea4b463ad781f9d70ac6e366f79876b181b200403b71f5731922462e4 17952 user-mode-linux_2.6.32-1um-4+37.diff.gz
 15d735560016bef67c765b55eb69e7946895fe96cea980597462a49150bf116a 7079528 user-mode-linux_2.6.32-1um-4+37_amd64.deb
Files: 
 211981a8378401bd4a2e23930d597f3e 2030 kernel extra user-mode-linux_2.6.32-1um-4+37.dsc
 bdf1b260c42d7fceb8156eb4259a1682 17952 kernel extra user-mode-linux_2.6.32-1um-4+37.diff.gz
 037c61fd01e7007d7dfc613b68ddc90d 7079528 kernel extra user-mode-linux_2.6.32-1um-4+37_amd64.deb

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)

iQIcBAEBAgAGBQJOhTOuAAoJEBv4PF5U/IZAnxAP/1+3d842OUG8kOQwJWWXFL07
tuLeobScGYt9MYgj+/sfZi3S8cYS547fjXp0oUlvB9H6llFP/IE7rLzCH7oN9tlv
Zuh63bGt7jLPYM6PNYovqpdkWCwMHEjI8jcK8eUk4Tr86HKU6fwsDKoJg3DnoMf+
jbQc6NZHCbg5nmfo41vuoyi6+zrTN1Acpbf+Cj/l+8BQs/2EZ3v03JM9ExfyyUrt
t4h/czCLJi+mRY7LsYgNDcDvT6bY9M+8cG6xlW32GjSV4okIQa73uinUe/87r5s7
rr4V4vcng6uMjawKC124OIPc4Rk1l3JF0V+x96YtSTCtZFTWqPBalaU7aEG8Pim8
5AKRyNXtWP1+wSJG3sPo1AjWhHy43wKNzQmBBWdo/4dBIX+c8GgYZiBN/l/aTOUn
W7WR1GAI7gxvt0MNAFwp2+AZuDJt0QnsgUFm7L6Gooy5em1Rg9qr2JxYt9K4bHs1
8UcSTOSg4Oj5gqHXv7622rb1C46tpniCVZkSuc7qTCceqCkVxX3mzYNGNixNlwiR
q9eOCfUVMMuoA3iJqQ6p42ICTZwgtjzepl85WnTDDr7RUc9iOXGRjdj/448alsbY
YqnIEw6DFweOU1hx7yNTiSHzfuq9Psmatwpu8vhZ0dpVDZal2Fq9sDUkGhk6q+43
dowrO9sr3Ge2Yw3Gswlh
=6K8r
-----END PGP SIGNATURE-----



--- End Message ---

Reply to: