Subject: Re: skb_shinfo(skb)->nr_frags > 0 while skb_is_gso(skb) == 0?

From: Stephen Hemminger <[email-masked]>
Date: Wed, 7 Oct 2009 09:16:31 -0700

On Wed, 7 Oct 2009 03:04:20 -0600
John Wright <[email-masked]> wrote:

> Hi Stephen,
> 
> On Tue, Oct 06, 2009 at 06:21:31PM -0700, Stephen Hemminger wrote:
> > On Tue, 6 Oct 2009 19:03:15 -0600
> > John Wright <[email-masked]> wrote:
> > > Bob Montgomery and I are debugging an OOPS in the bnx2 driver.  The
> > > driver OOPSes in bnx2_tx_int(), getting a NULL pointer dereference when
> > > checking if the skb is GSO.  (This is on 2.6.29, before is_gso was
> > > cached in the tx_buf (commit d62fda08), but bear with me - while kernels
> > > with that commit might not crash in the same place, I think we have
> > > discovered a bug that would manifest itself another way.)
> > > 
> > > So, first, a question for someone who knows more about sk_buff's than I:
> > > is it reasonable/legal for an skb for which skb_is_gso(skb) == 0 to also
> > > have skb_shinfo(skb)->nr_frags > 0?
> > 
> > Yes, if driver support Scatter/Gather and Checksum offload,
> > TCP (especially splice) will hand fragmented frames to device.
> 
> Is there a good way to generate lots of these types of packets?  Is
> disabling tso and gso with ethtool and sendmsg()ing big chunks of data
> enough?
> 

netperf should be able to do this easily.  Also try NFS as well.

--