• V
    slub: do not drop slab_mutex for sysfs_slab_add · 421af243
    Vladimir Davydov 提交于
    We release the slab_mutex while calling sysfs_slab_add from
    __kmem_cache_create since commit 66c4c35c ("slub: Do not hold
    slub_lock when calling sysfs_slab_add()"), because kobject_uevent called
    by sysfs_slab_add might block waiting for the usermode helper to exec,
    which would result in a deadlock if we took the slab_mutex while
    executing it.
    
    However, apart from complicating synchronization rules, releasing the
    slab_mutex on kmem cache creation can result in a kmemcg-related race.
    The point is that we check if the memcg cache exists before going to
    __kmem_cache_create, but register the new cache in memcg subsys after
    it.  Since we can drop the mutex there, several threads can see that the
    memcg cache does not exist and proceed to creating it, which is wrong.
    
    Fortunately, recently kobject_uevent was patched to call the usermode
    helper with the UMH_NO_WAIT flag, making the deadlock impossible.
    Therefore there is no point in releasing the slab_mutex while calling
    sysfs_slab_add, so let's simplify kmem_cache_create synchronization and
    fix the kmemcg-race mentioned above by holding the slab_mutex during the
    whole cache creation path.
    Signed-off-by: NVladimir Davydov <vdavydov@parallels.com>
    Acked-by: NChristoph Lameter <cl@linux.com>
    Cc: Greg KH <greg@kroah.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    421af243
slub.c 127.0 KB