lkml.org 
[lkml]   [2009]   [Mar]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH -mm 3/6] slub: introduce __kfree_rcu
    From
    Date
    On Tue, 2009-03-03 at 21:44 +0800, Lai Jiangshan wrote:
    > Introduce __kfree_rcu() for kfree_rcu()
    >
    > It like __kfree_rcu() in slab.c.
    > We can calculate the object poiter from a poiter inside this
    > object in slub.c, so we can use it for rcu callback and free
    > the object.
    >
    > Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
    > ---
    > diff --git a/mm/slub.c b/mm/slub.c
    > index 0280eee..b438ec5 100644
    > --- a/mm/slub.c
    > +++ b/mm/slub.c
    > @@ -2756,6 +2756,30 @@ void kfree(const void *x)
    > }
    > EXPORT_SYMBOL(kfree);
    >
    > +static void kfree_rcu_callback(struct rcu_head *rcu)
    > +{
    > + void *portion = rcu;
    > + struct page *page = virt_to_head_page(portion);
    > +
    > + if (unlikely(!PageSlab(page))) {
    > + BUG_ON(!PageCompound(page));

    I'd prefer you did a WARN_ON() to increase the likelihood that people
    will be able to copy-paste the oops for a bug report.

    > + put_page(page);
    > + } else {
    > + struct kmem_cache *s = page->slab;
    > + void *start = page_address(page);
    > + unsigned int index = (portion - start) / s->size;
    > + void *object = start + s->size * index;
    > +

    Again, I think the above would be more readable if you split the
    variable initialization from the declaration.

    > + slab_free(s, page, object, _RET_IP_);
    > + }
    > +}
    > +
    > +void __kfree_rcu(const void *x, struct rcu_head *rcu)
    > +{
    > + call_rcu(rcu, kfree_rcu_callback);
    > +}
    > +EXPORT_SYMBOL(__kfree_rcu);
    > +
    > /*
    > * kmem_cache_shrink removes empty slabs from the partial lists and sorts
    > * the remaining slabs by the number of items in use. The slabs with the
    >
    >
    >
    >
    >
    >
    >
    >
    >
    >



    \
     
     \ /
      Last update: 2009-03-23 08:53    [W:0.026 / U:61.664 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site