lkml.org 
[lkml]   [2010]   [Nov]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v14 06/17] Use callback to deal with skb_release_data() specially.
    Date
    From: Xin Xiaohui <xiaohui.xin@intel.com>

    If buffer is external, then use the callback to destruct
    buffers.

    Signed-off-by: Xin Xiaohui <xiaohui.xin@intel.com>
    Signed-off-by: Zhao Yu <yzhao81new@gmail.com>
    Reviewed-by: Jeff Dike <jdike@linux.intel.com>
    ---
    net/core/skbuff.c | 8 ++++++++
    1 files changed, 8 insertions(+), 0 deletions(-)
    diff --git a/net/core/skbuff.c b/net/core/skbuff.c
    index c83b421..5e6d69c 100644
    --- a/net/core/skbuff.c
    +++ b/net/core/skbuff.c
    @@ -210,6 +210,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,

    /* make sure we initialize shinfo sequentially */
    shinfo = skb_shinfo(skb);
    + shinfo->destructor_arg = NULL;
    memset(shinfo, 0, offsetof(struct skb_shared_info, dataref));
    atomic_set(&shinfo->dataref, 1);

    @@ -343,6 +344,13 @@ static void skb_release_data(struct sk_buff *skb)
    if (skb_has_frags(skb))
    skb_drop_fraglist(skb);

    + if (skb->dev && dev_is_mpassthru(skb->dev)) {
    + struct skb_ext_page *ext_page =
    + skb_shinfo(skb)->destructor_arg;
    + if (ext_page && ext_page->dtor)
    + ext_page->dtor(ext_page);
    + }
    +
    kfree(skb->head);
    }
    }
    --
    1.7.3


    \
     
     \ /
      Last update: 2010-11-04 09:51    [W:0.161 / U:0.056 seconds]
    ©2003-2014 Jasper Spaans. Advertise on this site