From: Ian Campbell <ian.campbell@citrix.com>
To: netdev@vger.kernel.org
Cc: David Miller <davem@davemloft.net>,
Eric Dumazet <eric.dumazet@gmail.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
Ian Campbell <ian.campbell@citrix.com>
Subject: [PATCH 4/9] skb: add skb_shinfo_init and use for both alloc_skb, build_skb and skb_recycle
Date: Thu, 3 May 2012 15:56:06 +0100 [thread overview]
Message-ID: <1336056971-7839-4-git-send-email-ian.campbell@citrix.com> (raw)
In-Reply-To: <1336056915.20716.96.camel@zakaz.uk.xensource.com>
There is only one semantic change here which is that skb_recycle now does:
kmemcheck_annotate_variable(shinfo->destructor_arg)
I don't think it was erroneously missing before (since in the skb_recycle case
it will have happened previously) but I beleive it is harmless to do it again
and this saves having a different copy of the same code for the recycle case.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
---
net/core/skbuff.c | 30 +++++++++++++-----------------
1 files changed, 13 insertions(+), 17 deletions(-)
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index c60b603..e96f68b 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -145,6 +145,16 @@ static void skb_under_panic(struct sk_buff *skb, int sz, void *here)
BUG();
}
+static void skb_shinfo_init(struct sk_buff *skb)
+{
+ struct skb_shared_info *shinfo = skb_shinfo(skb);
+
+ /* make sure we initialize shinfo sequentially */
+ memset(shinfo, 0, offsetof(struct skb_shared_info, dataref));
+ atomic_set(&shinfo->dataref, 1);
+ kmemcheck_annotate_variable(shinfo->destructor_arg);
+}
+
/* Allocate a new skbuff. We do this ourselves so we can fill in a few
* 'private' fields and also do memory statistics to find all the
* [BEEP] leaks.
@@ -170,7 +180,6 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,
int fclone, int node)
{
struct kmem_cache *cache;
- struct skb_shared_info *shinfo;
struct sk_buff *skb;
u8 *data;
@@ -210,11 +219,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,
skb->mac_header = ~0U;
#endif
- /* make sure we initialize shinfo sequentially */
- shinfo = skb_shinfo(skb);
- memset(shinfo, 0, offsetof(struct skb_shared_info, dataref));
- atomic_set(&shinfo->dataref, 1);
- kmemcheck_annotate_variable(shinfo->destructor_arg);
+ skb_shinfo_init(skb);
if (fclone) {
struct sk_buff *child = skb + 1;
@@ -255,7 +260,6 @@ EXPORT_SYMBOL(__alloc_skb);
*/
struct sk_buff *build_skb(void *data, unsigned int frag_size)
{
- struct skb_shared_info *shinfo;
struct sk_buff *skb;
unsigned int size = frag_size ? : ksize(data);
@@ -277,11 +281,7 @@ struct sk_buff *build_skb(void *data, unsigned int frag_size)
skb->mac_header = ~0U;
#endif
- /* make sure we initialize shinfo sequentially */
- shinfo = skb_shinfo(skb);
- memset(shinfo, 0, offsetof(struct skb_shared_info, dataref));
- atomic_set(&shinfo->dataref, 1);
- kmemcheck_annotate_variable(shinfo->destructor_arg);
+ skb_shinfo_init(skb);
return skb;
}
@@ -546,13 +546,9 @@ EXPORT_SYMBOL(consume_skb);
*/
void skb_recycle(struct sk_buff *skb)
{
- struct skb_shared_info *shinfo;
-
skb_release_head_state(skb);
- shinfo = skb_shinfo(skb);
- memset(shinfo, 0, offsetof(struct skb_shared_info, dataref));
- atomic_set(&shinfo->dataref, 1);
+ skb_shinfo_init(skb);
memset(skb, 0, offsetof(struct sk_buff, tail));
skb->data = skb->head + NET_SKB_PAD;
--
1.7.2.5
next prev parent reply other threads:[~2012-05-03 14:59 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-03 14:55 [PATCH v5 0/9] skb paged fragment destructors Ian Campbell
2012-05-03 14:56 ` [PATCH 1/9] net: add and use SKB_ALLOCSIZE Ian Campbell
2012-05-03 14:56 ` [PATCH 2/9] net: Use SKB_WITH_OVERHEAD in build_skb Ian Campbell
2012-05-03 14:56 ` [PATCH 3/9] chelsio: use SKB_WITH_OVERHEAD Ian Campbell
2012-05-03 14:56 ` Ian Campbell [this message]
2012-05-03 14:56 ` [PATCH 5/9] net: pad skb data and shinfo as a whole rather than individually Ian Campbell
2012-05-03 14:56 ` [PATCH 6/9] net: add support for per-paged-fragment destructors Ian Campbell
2012-05-03 14:56 ` [PATCH 7/9] net: add skb_orphan_frags to copy aside frags with destructors Ian Campbell
2012-05-03 15:41 ` Michael S. Tsirkin
2012-05-03 17:55 ` David Miller
2012-05-03 21:10 ` Michael S. Tsirkin
2012-05-04 6:54 ` David Miller
2012-05-04 10:03 ` Michael S. Tsirkin
2012-05-04 10:51 ` Ian Campbell
2012-05-06 17:01 ` Michael S. Tsirkin
2012-05-06 13:54 ` Michael S. Tsirkin
2012-05-07 10:24 ` Michael S. Tsirkin
2012-05-09 9:36 ` Ian Campbell
2012-05-03 14:56 ` [PATCH 8/9] net: add paged frag destructor support to kernel_sendpage Ian Campbell
2012-05-10 11:48 ` Michael S. Tsirkin
2012-05-03 14:56 ` [PATCH 9/9] sunrpc: use SKB fragment destructors to delay completion until page is released by network stack Ian Campbell
[not found] ` <1336056971-7839-9-git-send-email-ian.campbell-Sxgqhf6Nn4DQT0dZR+AlfA@public.gmane.org>
2012-05-10 11:19 ` Michael S. Tsirkin
[not found] ` <20120510111948.GA9609-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-05-10 13:26 ` Ian Campbell
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=1336056971-7839-4-git-send-email-ian.campbell@citrix.com \
--to=ian.campbell@citrix.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=mst@redhat.com \
--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 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).