lkml.org 
[lkml]   [2022]   [Aug]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[RFC PATCH 14/30] mm: prevent slabobj_ext allocations for slabobj_ext and kmem_cache objects
    From
    Use __GFP_NO_OBJ_EXT to prevent recursions when allocating slabobj_ext
    objects. Also prevent slabobj_ext allocations for kmem_cache objects.

    Signed-off-by: Suren Baghdasaryan <surenb@google.com>
    ---
    mm/memcontrol.c | 2 ++
    mm/slab.h | 6 ++++++
    2 files changed, 8 insertions(+)

    diff --git a/mm/memcontrol.c b/mm/memcontrol.c
    index 3f407ef2f3f1..dabb451dc364 100644
    --- a/mm/memcontrol.c
    +++ b/mm/memcontrol.c
    @@ -2809,6 +2809,8 @@ int alloc_slab_obj_exts(struct slab *slab, struct kmem_cache *s,
    void *vec;

    gfp &= ~OBJCGS_CLEAR_MASK;
    + /* Prevent recursive extension vector allocation */
    + gfp |= __GFP_NO_OBJ_EXT;
    vec = kcalloc_node(objects, sizeof(struct slabobj_ext), gfp,
    slab_nid(slab));
    if (!vec)
    diff --git a/mm/slab.h b/mm/slab.h
    index c767ce3f0fe2..d93b22b8bbe2 100644
    --- a/mm/slab.h
    +++ b/mm/slab.h
    @@ -475,6 +475,12 @@ static inline void prepare_slab_obj_exts_hook(struct kmem_cache *s, gfp_t flags,
    if (is_kmem_only_obj_ext())
    return;

    + if (s->flags & SLAB_NO_OBJ_EXT)
    + return;
    +
    + if (flags & __GFP_NO_OBJ_EXT)
    + return;
    +
    slab = virt_to_slab(p);
    if (!slab_obj_exts(slab))
    WARN(alloc_slab_obj_exts(slab, s, flags, false),
    --
    2.37.2.672.g94769d06f0-goog
    \
     
     \ /
      Last update: 2022-08-30 23:52    [W:4.036 / U:0.320 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site