• J
    mm/slab: don't keep free slabs if free_objects exceeds free_limit · 6052b788
    Joonsoo Kim 提交于
    Currently, determination to free a slab is done whenever each freed
    object is put into the slab.  This has a following problem.
    
    Assume free_limit = 10 and nr_free = 9.
    
    Free happens as following sequence and nr_free changes as following.
    
    free(become a free slab) free(not become a free slab) nr_free: 9 -> 10
    (at first free) -> 11 (at second free)
    
    If we try to check if we can free current slab or not on each object
    free, we can't free any slab in this situation because current slab
    isn't a free slab when nr_free exceed free_limit (at second free) even
    if there is a free slab.
    
    However, if we check it lastly, we can free 1 free slab.
    
    This problem would cause to keep too much memory in the slab subsystem.
    This patch try to fix it by checking number of free object after all
    free work is done.  If there is free slab at that time, we can free slab
    as much as possible so we keep free slab as minimal.
    Signed-off-by: NJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Jesper Dangaard Brouer <brouer@redhat.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    6052b788
slab.c 107.1 KB