Revision 3d3be4333fdf6faa080947b331a6a19bce1a4f57 authored by Eric Dumazet on 01 September 2010, 00:50:51 UTC, committed by David S. Miller on 02 September 2010, 02:17:35 UTC
Packets entering GRO might have different headrooms, even for a given
flow (because of implementation details in drivers, like copybreak).
We cant force drivers to deliver packets with a fixed headroom.

1) fix skb_segment()

skb_segment() makes the false assumption headrooms of fragments are same
than the head. When CHECKSUM_PARTIAL is used, this can give csum_start
errors, and crash later in skb_copy_and_csum_dev()

2) allocate a minimal skb for head of frag_list

skb_gro_receive() uses netdev_alloc_skb(headroom + skb_gro_offset(p)) to
allocate a fresh skb. This adds NET_SKB_PAD to a padding already
provided by netdevice, depending on various things, like copybreak.

Use alloc_skb() to allocate an exact padding, to reduce cache line
needs:
NET_SKB_PAD + NET_IP_ALIGN

bugzilla : https://bugzilla.kernel.org/show_bug.cgi?id=16626

Many thanks to Plamen Petrov, testing many debugging patches !
With help of Jarek Poplawski.

Reported-by: Plamen Petrov <pvp-lsts@fs.uni-ruse.bg>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Jarek Poplawski <jarkao2@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 87f94b4
History
File Mode Size
Kconfig -rw-r--r-- 2.5 KB
Kconfig.iosched -rw-r--r-- 1.8 KB
Makefile -rw-r--r-- 592 bytes
blk-barrier.c -rw-r--r-- 8.6 KB
blk-cgroup.c -rw-r--r-- 26.8 KB
blk-cgroup.h -rw-r--r-- 8.0 KB
blk-core.c -rw-r--r-- 67.8 KB
blk-exec.c -rw-r--r-- 2.6 KB
blk-integrity.c -rw-r--r-- 10.0 KB
blk-ioc.c -rw-r--r-- 3.9 KB
blk-iopoll.c -rw-r--r-- 5.9 KB
blk-lib.c -rw-r--r-- 5.3 KB
blk-map.c -rw-r--r-- 8.1 KB
blk-merge.c -rw-r--r-- 10.6 KB
blk-settings.c -rw-r--r-- 24.6 KB
blk-softirq.c -rw-r--r-- 4.1 KB
blk-sysfs.c -rw-r--r-- 13.8 KB
blk-tag.c -rw-r--r-- 9.9 KB
blk-timeout.c -rw-r--r-- 5.6 KB
blk.h -rw-r--r-- 4.5 KB
bsg.c -rw-r--r-- 23.5 KB
cfq-iosched.c -rw-r--r-- 101.5 KB
cfq.h -rw-r--r-- 3.6 KB
compat_ioctl.c -rw-r--r-- 22.1 KB
deadline-iosched.c -rw-r--r-- 11.4 KB
elevator.c -rw-r--r-- 24.8 KB
genhd.c -rw-r--r-- 29.9 KB
ioctl.c -rw-r--r-- 8.2 KB
noop-iosched.c -rw-r--r-- 2.6 KB
scsi_ioctl.c -rw-r--r-- 18.0 KB

back to top