On Wed, 2012-03-14 at 17:26 -0700, David Miller wrote: > From: Ben Hutchings <[email protected]> > Date: Thu, 15 Mar 2012 00:14:07 +0000 > > > On Wed, 2012-03-14 at 02:22 -0700, David Miller wrote: > >> Please add the following networking bug fixes to 3.0.x-stable > > [...] > > > > Any reason you didn't include commit > > ff3bc1e7527504a93710535611b2f812f3bb89bf ("sfc: Fix assignment of > > ip_summed for pre-allocated skbs")? The bug it fixes was introduced in > > 2.6.37. > > It didn't even come close to applying cleanly, if you submit a 3.0.x > backport I'm totally fine with Greg including it.
If you start with 'git cherry-pick' then you'll probably need to set diff.renameLimit=0 to apply any Ethernet driver fixes to 3.0. Alternately, format-patch and adjust the paths before applying again. Anyway, here's the resulting patch. Ben. -- Ben Hutchings, Staff Engineer, Solarflare Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked.
>From 2bf745f12af273bdff17ad422c1605cdee754d93 Mon Sep 17 00:00:00 2001 From: Ben Hutchings <[email protected]> Date: Sat, 25 Feb 2012 00:03:10 +0000 Subject: [PATCH net-next] sfc: Fix assignment of ip_summed for pre-allocated skbs commit ff3bc1e7527504a93710535611b2f812f3bb89bf upstream. When pre-allocating skbs for received packets, we set ip_summed = CHECKSUM_UNNCESSARY. We used to change it back to CHECKSUM_NONE when the received packet had an incorrect checksum or unhandled protocol. Commit bc8acf2c8c3e43fcc192762a9f964b3e9a17748b ('drivers/net: avoid some skb->ip_summed initializations') mistakenly replaced the latter assignment with a DEBUG-only assertion that ip_summed == CHECKSUM_NONE. This assertion is always false, but it seems no-one has exercised this code path in a DEBUG build. Fix this by moving our assignment of CHECKSUM_UNNECESSARY into efx_rx_packet_gro(). Signed-off-by: Ben Hutchings <[email protected]> --- drivers/net/sfc/rx.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/sfc/rx.c b/drivers/net/sfc/rx.c index 62e4364..4004fc2 100644 --- a/drivers/net/sfc/rx.c +++ b/drivers/net/sfc/rx.c @@ -155,11 +155,10 @@ static int efx_init_rx_buffers_skb(struct efx_rx_queue *rx_queue) if (unlikely(!skb)) return -ENOMEM; - /* Adjust the SKB for padding and checksum */ + /* Adjust the SKB for padding */ skb_reserve(skb, NET_IP_ALIGN); rx_buf->len = skb_len - NET_IP_ALIGN; rx_buf->is_page = false; - skb->ip_summed = CHECKSUM_UNNECESSARY; rx_buf->dma_addr = pci_map_single(efx->pci_dev, skb->data, rx_buf->len, @@ -498,6 +497,7 @@ static void efx_rx_packet_gro(struct efx_channel *channel, EFX_BUG_ON_PARANOID(!checksummed); rx_buf->u.skb = NULL; + skb->ip_summed = CHECKSUM_UNNECESSARY; gro_result = napi_gro_receive(napi, skb); } -- 1.7.7.6
