• Roman Gushchin's avatar
    mm: memcg/slab: simplify memcg cache creation · d797b7d0
    Roman Gushchin authored
    Because the number of non-root kmem_caches doesn't depend on the number of
    memory cgroups anymore and is generally not very big, there is no more
    need for a dedicated workqueue.
    
    Also, as there is no more need to pass any arguments to the
    memcg_create_kmem_cache() except the root kmem_cache, it's possible to
    just embed the work structure into the kmem_cache and avoid the dynamic
    allocation of the work structure.
    
    This will also simplify the synchronization: for each root kmem_cache
    there is only one work.  So there will be no more concurrent attempts to
    create a non-root kmem_cache for a root kmem_cache: the second and all
    following attempts to queue the work will fail.
    
    On the kmem_cache destruction path there is no more need to call the
    expensive flush_workqueue() and wait for all pending works to be finished.
    Instead, cancel_work_sync() can be used to cancel/wait for only one work.
    Signed-off-by: default avatarRoman Gushchin <guro@fb.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Reviewed-by: default avatarShakeel Butt <shakeelb@google.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Tejun Heo <tj@kernel.org>
    Link: http://lkml.kernel.org/r/20200623174037.3951353-14-guro@fb.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d797b7d0
slab_common.c 34.9 KB