lkml.org 
[lkml]   [2012]   [Sep]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH 1/2] slab: do ClearSlabPfmemalloc() for all pages of slab
    It took me a while to getting around to reviewing this due to attending
    kernel summit. Sorry about that.

    On Sat, Aug 25, 2012 at 11:11:10PM +0900, Joonsoo Kim wrote:
    > Now, we just do ClearSlabPfmemalloc() for first page of slab
    > when we clear SlabPfmemalloc flag. It is a problem because we sometimes
    > test flag of page which is not first page of slab in __ac_put_obj().
    >

    Well spotted.

    The impact is marginal as far as pfmemalloc protection is concerned. I do not
    believe that any of the slabs that use high-order allocations are used in for
    the swap-over-network paths. It would be unfortunate if that ever changed.

    > So add code to do ClearSlabPfmemalloc for all pages of slab.
    >

    I would prefer if the pfmemalloc information was kept on the head page.
    Would the following patch also address your concerns?

    diff --git a/mm/slab.c b/mm/slab.c
    index 811af03..d34a903 100644
    --- a/mm/slab.c
    +++ b/mm/slab.c
    @@ -1000,7 +1000,7 @@ static void *__ac_get_obj(struct kmem_cache *cachep, struct array_cache *ac,
    l3 = cachep->nodelists[numa_mem_id()];
    if (!list_empty(&l3->slabs_free) && force_refill) {
    struct slab *slabp = virt_to_slab(objp);
    - ClearPageSlabPfmemalloc(virt_to_page(slabp->s_mem));
    + ClearPageSlabPfmemalloc(virt_to_head_page(slabp->s_mem));
    clear_obj_pfmemalloc(&objp);
    recheck_pfmemalloc_active(cachep, ac);
    return objp;
    @@ -1032,7 +1032,7 @@ static void *__ac_put_obj(struct kmem_cache *cachep, struct array_cache *ac,
    {
    if (unlikely(pfmemalloc_active)) {
    /* Some pfmemalloc slabs exist, check if this is one */
    - struct page *page = virt_to_page(objp);
    + struct page *page = virt_to_head_page(objp);
    if (PageSlabPfmemalloc(page))
    set_obj_pfmemalloc(&objp);
    }
    --
    Mel Gorman
    SUSE Labs


    \
     
     \ /
      Last update: 2012-09-03 12:43    [W:0.027 / U:34.132 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site