Re: [PATCH] memory-hotplug: Fix bad area access on dissolve_free_huge_pages()

From: Rui Teng
Date: Fri Sep 16 2016 - 09:59:12 EST

On 9/15/16 12:37 AM, Dave Hansen wrote:
On 09/14/2016 09:33 AM, Rui Teng wrote:

How about return the size of page freed from dissolve_free_huge_page(),
and jump such step on pfn?

That would be a nice improvement.

But, as far as describing the initial problem, can you explain how the
tail pages still ended up being PageHuge()? Seems like dissolving the
huge page should have cleared that.

I use the scripts of tools/testing/selftests/memory-hotplug/mem-on- to test and reproduce this bug. And I printed the pfn range
on dissolve_free_huge_pages(). The sizes of the pfn range are always
4096, and the ranges are separated.
[ 72.362427] start_pfn: 204800, end_pfn: 208896
[ 72.371677] start_pfn: 2162688, end_pfn: 2166784
[ 72.373945] start_pfn: 217088, end_pfn: 221184
[ 72.383218] start_pfn: 2170880, end_pfn: 2174976
[ 72.385918] start_pfn: 2306048, end_pfn: 2310144
[ 72.388254] start_pfn: 2326528, end_pfn: 2330624

Sometimes, it will report a failure:
[ 72.371690] memory offlining [mem 0x2100000000-0x210fffffff] failed

And sometimes, it will report following:
[ 72.373956] Offlined Pages 4096

Whether the start_pfn and end_pfn of dissolve_free_huge_pages could be
*random*? If so, the range may not include any page head and start from
tail page, right?