• Xishi Qiu's avatar
    mm: fix set pageblock migratetype in deferred struct page init · e780149b
    Xishi Qiu authored
    On x86_64 MAX_ORDER_NR_PAGES is usually 4M, and a pageblock is usually
    2M, so we only set one pageblock's migratetype in deferred_free_range()
    if pfn is aligned to MAX_ORDER_NR_PAGES.  That means it causes
    uninitialized migratetype blocks, you can see from "cat
    /proc/pagetypeinfo", almost half blocks are Unmovable.
    
    Also we missed freeing the last block in deferred_init_memmap(), it
    causes memory leak.
    
    Fixes: ac5d2539 ("mm: meminit: reduce number of times pageblocks are set during struct page init")
    Link: http://lkml.kernel.org/r/57A3260F.4050709@huawei.comSigned-off-by: default avatarXishi Qiu <qiuxishi@huawei.com>
    Cc: Taku Izumi <izumi.taku@jp.fujitsu.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: "Kirill A . Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e780149b
page_alloc.c 202 KB