On Fri, 2010-10-15 at 16:34 +0200, Niels Möller wrote: > Package: linux-2.6 > Version: 2.6.32-23 > Severity: important > > *** Please type your report below this line *** > > My wired network interface stops working (not able to transmit any > packets, I think, but it might be reception which is broken. Anyway, > ping to hosts on the local network results in a No route to host error, > which means that sending or receiving arp packets fail). [...] > It has hanged in this way twice today, each time after I did two things > which might be related: > > 1. I sent some large packets (tcp over ipv4 over ethernet) of size up to > roughly 20000 bytes and at a rate close to the links capacity of > 100Mbit/s. One such packet, displayed by tcpdump: > > 13:58:15.872214 00:26:9e:b3:2f:3b (oui Unknown) > 00:11:25:85:b0:1a (oui > Unknown), ethertype IPv4 (0x0800), length 22790: 192.168.1.135.47058 > > 192.168.1.108.4711: Flags [.], seq 1079380:1102104, ack 1, win 32, options > [nop,nop,TS val 19304579 ecr 1030215], length 22724 > > I have no idea why the kernel sent such large packets. According to > ifconfig eth0, the MTU is 1500 bytes. Is it supposed to work like > that, or is this another bug? [...]
This driver and hardware implement TCP Segmentation Offload (TSO), which means the kernel can provide oversized pseudo-packets that are turned into multiple packets on the wire. I did notice a later bug fix to this driver which might possibly address the bug you're seeing. Please can you test the attached patch, following the instructions at <http://kernel-handbook.alioth.debian.org/ch-common-tasks.html#s-common-official>. Ben. -- Ben Hutchings Once a job is fouled up, anything done to improve it makes it worse.
From: Jie Yang <jie.y...@atheros.com> Date: Tue, 27 Oct 2009 22:31:19 -0700 Subject: [PATCH] atl1c: duplicate atl1c_get_tpd commit 678b77e265f6d66f1e68f3d095841c44ba5ab112 upstream. remove duplicate atl1c_get_tpd, it may cause hardware to send wrong packets. Signed-off-by: Jie Yang <jie.y...@atheros.com> Signed-off-by: David S. Miller <da...@davemloft.net> --- drivers/net/atl1c/atl1c_main.c | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-) diff --git a/drivers/net/atl1c/atl1c_main.c b/drivers/net/atl1c/atl1c_main.c index 1372e9a..3b8801a 100644 --- a/drivers/net/atl1c/atl1c_main.c +++ b/drivers/net/atl1c/atl1c_main.c @@ -1981,8 +1981,6 @@ static void atl1c_tx_map(struct atl1c_adapter *adapter, else { use_tpd = atl1c_get_tpd(adapter, type); memcpy(use_tpd, tpd, sizeof(struct atl1c_tpd_desc)); - use_tpd = atl1c_get_tpd(adapter, type); - memcpy(use_tpd, tpd, sizeof(struct atl1c_tpd_desc)); } buffer_info = atl1c_get_tx_buffer(adapter, use_tpd); buffer_info->length = buf_len - mapped_len; -- 1.7.1
signature.asc
Description: This is a digitally signed message part