lkml.org 
[lkml]   [2016]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.8 86/92] memcg: prevent memcg caches to be both OFF_SLAB & OBJFREELIST_SLAB
    Date
    4.8-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Greg Thelen <gthelen@google.com>

    commit f773e36de3d77c4000ca914c9d146f55f2fd51e8 upstream.

    While testing OBJFREELIST_SLAB integration with pagealloc, we found a
    bug where kmem_cache(sys) would be created with both CFLGS_OFF_SLAB &
    CFLGS_OBJFREELIST_SLAB. When it happened, critical allocations needed
    for loading drivers or creating new caches will fail.

    The original kmem_cache is created early making OFF_SLAB not possible.
    When kmem_cache(sys) is created, OFF_SLAB is possible and if pagealloc
    is enabled it will try to enable it first under certain conditions.
    Given kmem_cache(sys) reuses the original flag, you can have both flags
    at the same time resulting in allocation failures and odd behaviors.

    This fix discards allocator specific flags from memcg before calling
    create_cache.

    The bug exists since 4.6-rc1 and affects testing debug pagealloc
    configurations.

    Fixes: b03a017bebc4 ("mm/slab: introduce new slab management type, OBJFREELIST_SLAB")
    Link: http://lkml.kernel.org/r/1478553075-120242-1-git-send-email-thgarnie@google.com
    Signed-off-by: Greg Thelen <gthelen@google.com>
    Signed-off-by: Thomas Garnier <thgarnie@google.com>
    Tested-by: Thomas Garnier <thgarnie@google.com>
    Acked-by: Christoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    mm/slab_common.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    --- a/mm/slab_common.c
    +++ b/mm/slab_common.c
    @@ -533,8 +533,8 @@ void memcg_create_kmem_cache(struct mem_

    s = create_cache(cache_name, root_cache->object_size,
    root_cache->size, root_cache->align,
    - root_cache->flags, root_cache->ctor,
    - memcg, root_cache);
    + root_cache->flags & CACHE_CREATE_MASK,
    + root_cache->ctor, memcg, root_cache);
    /*
    * If we could not create a memcg cache, do not complain, because
    * that's not critical at all as we can always proceed with the root

    \
     
     \ /
      Last update: 2016-11-17 11:55    [W:4.036 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site