• Oscar Salvador's avatar
    mm/page_alloc.c: clean up check_for_memory() · 7b0e0c0e
    Oscar Salvador authored
    check_for_memory() looks a bit confusing.  First of all, we have this:
    
    if (N_MEMORY == N_NORMAL_MEMORY)
    	return;
    
    Checking the ENUM declaration, looks like N_MEMORY canot be equal to
    N_NORMAL_MEMORY.
    
    I could not find where N_MEMORY is set to N_NORMAL_MEMORY, or the other
    way around either, so unless I am missing something, this condition will
    never evaluate to true.  It makes sense to get rid of it.
    
    Moving forward, the operations within the loop look a bit confusing as
    well.
    
    We set N_HIGH_MEMORY unconditionally, and then we set N_NORMAL_MEMORY in
    case we have CONFIG_HIGHMEM (N_NORMAL_MEMORY != N_HIGH_MEMORY) and zone <=
    ZONE_NORMAL.  (N_HIGH_MEMORY falls back to N_NORMAL_MEMORY on
    !CONFIG_HIGHMEM systems, and that is why we can just go ahead and set
    N_HIGH_MEMORY unconditionally)
    
    Although this works, it is a bit subtle.
    
    I think that this could be easier to follow:
    
    First, we should only set N_HIGH_MEMORY in case we have CONFIG_HIGHMEM.
    And then we should set N_NORMAL_MEMORY in case zone <= ZONE_NORMAL,
    without further checking whether we have CONFIG_HIGHMEM or not.
    
    Link: http://lkml.kernel.org/r/20180828210158.4617-1-osalvador@techadventures.netSigned-off-by: default avatarOscar Salvador <osalvador@suse.de>
    Reviewed-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Cc: Michael Hocko <mhocko@suse.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Pavel Tatashin <pavel.tatashin@microsoft.com
    Cc: Stephen Rothwell <sfr@canb.auug.org.au>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7b0e0c0e
page_alloc.c 222 KB