• Vlastimil Babka's avatar
    mm/slub: perform free consistency checks before call_rcu · bc29d5bd
    Vlastimil Babka authored
    
    
    For SLAB_TYPESAFE_BY_RCU caches we use call_rcu to perform empty slab
    freeing. The rcu callback rcu_free_slab() calls __free_slab() that
    currently includes checking the slab consistency for caches with
    SLAB_CONSISTENCY_CHECKS flags. This check needs the slab->objects field
    to be intact.
    
    Because in the next patch we want to allow rcu_head in struct slab to
    become larger in debug configurations and thus potentially overwrite
    more fields through a union than slab_list, we want to limit the fields
    used in rcu_free_slab().  Thus move the consistency checks to
    free_slab() before call_rcu(). This can be done safely even for
    SLAB_TYPESAFE_BY_RCU caches where accesses to the objects can still
    occur after freeing them.
    
    As a result, only the slab->slab_cache field has to be physically
    separate from rcu_head for the freeing callback to work. We also save
    some cycles in the rcu callback for caches with consistency checks
    enabled.
    Signed-off-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Reviewed-by: default avatarHyeonggon Yoo <42.hyeyoo@gmail.com>
    bc29d5bd
slub.c 156 KB