• Tobin C. Harding's avatar
    slob: respect list_head abstraction layer · 130e8e09
    Tobin C. Harding authored
    Currently we reach inside the list_head.  This is a violation of the layer
    of abstraction provided by the list_head.  It makes the code fragile.
    More importantly it makes the code wicked hard to understand.
    
    The code reaches into the list_head structure to counteract the fact that
    the list _may_ have been changed during slob_page_alloc().  Instead of
    this we can add a return parameter to slob_page_alloc() to signal that the
    list was modified (list_del() called with page->lru to remove page from
    the freelist).
    
    This code is concerned with an optimisation that counters the tendency for
    first fit allocation algorithm to fragment memory into many small chunks
    at the front of the memory pool.  Since the page is only removed from the
    list when an allocation uses _all_ the remaining memory in the page then
    in this special case fragmentation does not occur and we therefore do not
    need the optimisation.
    
    Add a return parameter to slob_page_alloc() to signal that the allocation
    used up the whole page and that the page was removed from the free list.
    After calling slob_page_alloc() check the return value just added and only
    attempt optimisation if the page is still on the list.
    
    Use list_head API instead of reaching into the list_head structure to
    check if sp is at the front of the list.
    
    Link: http://lkml.kernel.org/r/20190402230545.2929-3-tobin@kernel.orgSigned-off-by: default avatarTobin C. Harding <tobin@kernel.org>
    Acked-by: default avatarChristoph Lameter <cl@linux.com>
    Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Roman Gushchin <guro@fb.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    130e8e09
slob.c 17 KB