From: Rusty Russell <rusty@rustcorp.com.au>
To: David Miller <davem@davemloft.net>
Cc: netdev@vger.kernel.org, maxk@qualcomm.com, herbert@gondor.apana.org.au
Subject: Re: [PATCH] net: add destructor for skb data (rewritten)
Date: Sun, 20 Apr 2008 02:20:39 +1000 [thread overview]
Message-ID: <200804200220.39985.rusty@rustcorp.com.au> (raw)
In-Reply-To: <20080419.023524.75551453.davem@davemloft.net>
On Saturday 19 April 2008 19:35:24 David Miller wrote:
> From: Rusty Russell <rusty@rustcorp.com.au>
> Date: Fri, 18 Apr 2008 14:21:25 +1000
>
> > If we want to notify something when an skb is truly finished (such as
> > for tun vringfd support), we need a destructor on the data.
> >
> > This turns out to be slightly non-trivial as fragments from one skb
> > get copied to another skb: if the first skb has a destructor (or its
> > parent does) we need to keep a reference to it and destroy it only
> > when (all the) children are destroyed. We add an 'orig' pointer to
> > the skb_shared_info to do this.
> >
> > But there's currently no way to get from the shinfo to the head (to
> > kfree it), so we add a 'len' field. A better alternative to this
> > might be to move the skb_shared_info to before the head of the skb data.
> >
> > Note that the destructor is responsible for calling kfree: for the tun
> > device, this is critical since the destructor can be called from any
> > context and it has to do a copy_to_user, so it queues the skb.
> >
> > Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
>
> I'm mostly ambivalent but I will say I'm not happy about all of this
> extra state you're adding even though it's "only" to the SKB data
> shared-info struct and not sk_buff properly.
Me neither. Moving the shared_info to the front of the data would reduce it
to two fields for me (removing len and destructor arg), but I held off for
now because this is a lesser change and possible for 2.6.26.
> Does this handle SKB frags of arbitrary depth? SKB's can be nested to
> arbitrary depths via the frag mechanism.
It doesn't matter in this case. It's the skb creator who sets the destructor,
and wants it called when all pages in shinfo->frags[] are done with. If it
wanted to also include the frag_list in this lifetime, it would simply
set ->orig on those skbs's shinfo to point back to the head shinfo, and
adjust dataref accordingly.
As long as the anyone referencing a frags page from an skb into another sets
the orig ptr & bumps dataref, this will work. If someone kept a reference to
a page and then freed the skb it game from, we're already broken.
You could think of it as a 'struct request' for networking. Or not.
Cheers,
Rusty.
next prev parent reply other threads:[~2008-04-19 16:20 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-04-18 4:21 [PATCH] net: add destructor for skb data (rewritten) Rusty Russell
2008-04-19 9:35 ` David Miller
2008-04-19 16:20 ` Rusty Russell [this message]
2008-04-19 9:46 ` Evgeniy Polyakov
2008-04-19 15:49 ` Rusty Russell
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=200804200220.39985.rusty@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=maxk@qualcomm.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 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.