From: "Dmitry Petukhov" <dmgenp@gmail.com>
To: "Wei Yongjun" <yjwei@cn.fujitsu.com>
Cc: davem@davemloft.net, netdev@vger.kernel.org, acme@ghostprotocols.net
Subject: Re: [PATCH 2.6.26-rc4] fix double call of kfree_skb in net/llc/llc_sap.c
Date: Wed, 28 May 2008 16:59:45 +0600 [thread overview]
Message-ID: <84ee89da0805280359mcbc43f0q33f29960af20fba1@mail.gmail.com> (raw)
In-Reply-To: <84ee89da0805270235t7ae75356la2ffbb5244de2f74@mail.gmail.com>
2008/5/27 Dmitry Petukhov <dmgenp@gmail.com>:
> 2008/5/27 Wei Yongjun <yjwei@cn.fujitsu.com>:
>
>> Normally,
>>
>> skb_get() (**return )
>> kfree_skb()
>>
>> will do nothing. If you return with no kfree_skb(), it will let that skb can
>> not be free.
>>
>> skb_get()
>> kfree_skb()
>> kfree_skb()
>>
>> do the real free.
>
> Yeah, you're right. Looks like we mislocated the root of our problem
> (llc socket hangs on receive). Will debug further .
> Thanks for explanation.
>
Looks like we found the real root of our problem.
file net/llc/llc_sap.c:
skb_set_owner_r is called before llc_sap_rcv in two places (lines 363, 384)
skb_set_owner_r do this:
atomic_add(skb->truesize, &sk->sk_rmem_alloc);
and in llc_sap_state_process, on line 223 sock_queue_rcv_skb is
called, which also calls set_owner_r,
which in turn adds skb->truesize to sk->sk_rmem_alloc once more.
This double-addition results in sk_mem_alloc growth to exceed sk_rcvbuf.
We can observe this in /proc/net/llc/socket, rx_queue field.
after this value exceeds sk_rcvbuf, sock_queue_rcv_skb always return
-ENOMEM, and
socket stops receiving.
//note: please CC me on reply, i'm not subscribed to the list.
next prev parent reply other threads:[~2008-05-28 10:59 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-27 7:09 [PATCH 2.6.26-rc4] fix double call of kfree_skb in net/llc/llc_sap.c Dmitry Petukhov
2008-05-27 7:31 ` Wei Yongjun
2008-05-27 8:00 ` Dmitry Petukhov
[not found] ` <84ee89da0805270047v1c76b4f3k5768fe853f2cea1d@mail.gmail.com>
[not found] ` <483BC1B0.2090600@cn.fujitsu.com>
[not found] ` <84ee89da0805270235t7ae75356la2ffbb5244de2f74@mail.gmail.com>
2008-05-28 10:59 ` Dmitry Petukhov [this message]
2008-05-28 20:16 ` Arnaldo Carvalho de Melo
2008-05-29 8:51 ` Dmitry Petukhov
2008-05-29 10:45 ` David Miller
2008-05-29 13:44 ` [PATCH][LLC]: Fix double accounting of received packets Arnaldo Carvalho de Melo
2008-05-30 9:57 ` 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=84ee89da0805280359mcbc43f0q33f29960af20fba1@mail.gmail.com \
--to=dmgenp@gmail.com \
--cc=acme@ghostprotocols.net \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=yjwei@cn.fujitsu.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).