All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vlad Yasevich <vyasevich@gmail.com>
To: Jim Baxter <jim_baxter@mentor.com>,
	linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>
Cc: "David S. Miller" <davem@davemloft.net>,
	kamal@canonical.com, Ben Hutchings <bhutchings@solarflare.com>,
	edumazet@google.com, mszeredi@suse.cz, fw@strlen.de
Subject: Re: skbuff truesize incorrect.
Date: Thu, 22 May 2014 15:25:29 -0400	[thread overview]
Message-ID: <537E4F29.9080103@gmail.com> (raw)
In-Reply-To: <537E4AFD.20304@mentor.com>

On 05/22/2014 03:07 PM, Jim Baxter wrote:
> Hi, I was hoping you can help me with some questions.
> 
> I have been investigating a network issue with bursts of network traffic
> over USB CDC-NCM, the issue is that the kernel is dropping packets
> because sk_rcvqueues_full() returns true due to skb2->truesize is always
> 32960 instead of SKB_TRUESIZE(skb2->len) which is about 1800.
> 
> The code I am trying to fix is this code below, it is splitting a set of
> multiple network packets compressed into a single 16k packet into
> individual skb's and sending them up the network stack.
> 
>     skb2 = skb_clone(skb, GFP_ATOMIC);
>     if (skb2 == NULL)
>         goto err;
> 
>     if (!skb_pull(skb2, index)) {
>         ret = -EOVERFLOW;
>         goto err;
>     }

This assumes that you original 16K packet is linear.  Is that
always the case?

> 
>     skb_trim(skb2, dg_len - crc_len);
> 
> My questions are:
> 
> 1) Which buffer size does truesize represent, is it the total buffer or
> just the data related to the relevant skb?

Total buffer size (including the struct sk_buff).

> 
> 2) If truesize is for the skb it is contained within should it be
> updated during the call to skb_trim?

No, because the the buffer/memory is still there.  skb_trim just
sets the tail pointer and adjusts skb->len.


> 
> 3) Why does the truesize default to 32960?

Probably because that's how much buffer space was actually allocated
for the original skb.  When you cloned it, you inherited the truesize
since a clone is just the struct sk_buff that points into the data
of the original.

This is the very same problem that I ran into with SCTP since it
has similar code in it.  You can play games with truesize manually,
but you have to be very careful here.

-vlad
> 
> 
> Thank you for any help,
> Jim Baxter.
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 


  parent reply	other threads:[~2014-05-22 19:25 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-22 19:07 skbuff truesize incorrect Jim Baxter
2014-05-22 19:21 ` David Miller
2014-05-22 20:21   ` Jim Baxter
2014-05-22 20:30     ` Eric Dumazet
2014-05-22 20:30       ` Eric Dumazet
2014-05-22 20:58     ` David Miller
2014-05-23  9:21       ` Jim Baxter
2014-05-23  9:27         ` David Laight
2014-05-23 16:46         ` David Miller
2014-05-22 19:25 ` Vlad Yasevich [this message]
2014-05-22 19:39   ` Jim Baxter
2014-05-22 19:59     ` Eric Dumazet
2014-05-22 20:21       ` Jim Baxter
2014-05-22 20:58 ` Eric Dumazet
2014-05-22 21:03   ` Eric Dumazet
2014-05-22 21:10     ` David Miller
2014-05-23  7:07       ` Bjørn Mork
2014-05-23  8:58         ` Jim Baxter
2014-05-23  9:33           ` Bjørn Mork
2014-05-23 14:00             ` Eric Dumazet
2014-05-23 15:44             ` Rick Jones
2014-05-23 16:00               ` Eric Dumazet
2014-05-23  8:52   ` David Laight
2014-05-23  8:52     ` David Laight
2014-05-23  9:48     ` Bjørn Mork
2014-05-23 10:45       ` David Laight
2014-05-23 10:45         ` David Laight
2014-05-23 11:13         ` Jim Baxter
2014-05-23 13:47           ` Eric Dumazet
2014-05-23 15:00             ` Jim Baxter
2014-05-23 15:30             ` David Laight
2014-05-23 15:30               ` David Laight
2014-05-23 15:41               ` Eric Dumazet
2014-05-23 20:18     ` David Miller
2014-05-27 15:23       ` David Laight
2014-05-27 15:52         ` David Miller
2014-05-27 15:52           ` David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=537E4F29.9080103@gmail.com \
    --to=vyasevich@gmail.com \
    --cc=bhutchings@solarflare.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=fw@strlen.de \
    --cc=jim_baxter@mentor.com \
    --cc=kamal@canonical.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=mszeredi@suse.cz \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.