• Vlastimil Babka's avatar
    mm/sl*b: Differentiate struct slab fields by sl*b implementations · 401fb12c
    Vlastimil Babka authored
    With a struct slab definition separate from struct page, we can go
    further and define only fields that the chosen sl*b implementation uses.
    This means everything between __page_flags and __page_refcount
    placeholders now depends on the chosen CONFIG_SL*B. Some fields exist in
    all implementations (slab_list) but can be part of a union in some, so
    it's simpler to repeat them than complicate the definition with ifdefs
    even more.
    
    The patch doesn't change physical offsets of the fields, although it
    could be done later - for example it's now clear that tighter packing in
    SLOB could be possible.
    
    This should also prevent accidental use of fields that don't exist in
    given implementation. Before this patch virt_to_cache() and
    cache_from_obj() were visible for SLOB (albeit not used), although they
    rely on the slab_cache field that isn't set by SLOB. With this patch
    it's now a compile error, so these functions are now hidden behind
    an #ifndef CONFIG_SLOB.
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Reviewed-by: default avatarRoman Gushchin <guro@fb.com>
    Tested-by: Marco Elver <elver@google.com> # kfence
    Reviewed-by: default avatarHyeonggon Yoo <42.hyeyoo@gmail.com>
    Tested-by: default avatarHyeonggon Yoo <42.hyeyoo@gmail.com>
    Cc: Alexander Potapenko <glider@google.com>
    Cc: Marco Elver <elver@google.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: <kasan-dev@googlegroups.com>
    401fb12c
core.c 31.1 KB