Pages marked as LOCAL_NODE_DATA are skipped when we do memory offline. So we have to skip them again when we do memory online. Signed-off-by: Tang Chen <tangchen@xxxxxxxxxxxxxx> --- mm/memory_hotplug.c | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 075d412..21d6fcb 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -825,12 +825,18 @@ static void generic_online_page(struct page *page) static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages, void *arg) { - unsigned long i; + unsigned long i, magic; unsigned long onlined_pages = *(unsigned long *)arg; struct page *page; if (PageReserved(pfn_to_page(start_pfn))) for (i = 0; i < nr_pages; i++) { page = pfn_to_page(start_pfn + i); + magic = (unsigned long)page->lru.next; + + /* Skip pages storing local node kernel data. */ + if (magic == LOCAL_NODE_DATA) + continue; + (*online_page_callback)(page); onlined_pages++; } -- 1.7.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>