diff options
authorPavel Tatashin <>2018-05-12 02:01:50 +0300
committerLinus Torvalds <>2018-05-12 03:28:45 +0300
commit27227c733852f71008e9bf165950bb2edaed3a90 (patch)
parent6098d7e136692f9c6e23ae362c62ec822343e4d5 (diff)
mm: sections are not offlined during memory hotremove
Memory hotplug and hotremove operate with per-block granularity. If the machine has a large amount of memory (more than 64G), the size of a memory block can span multiple sections. By mistake, during hotremove we set only the first section to offline state. The bug was discovered because kernel selftest started to fail: After commit, "mm/memory_hotplug: optimize probe routine". But, the bug is older than this commit. In this optimization we also added a check for sections to be in a proper state during hotplug operation. Link: Fixes: 2d070eab2e82 ("mm: consider zone which is not fully populated to have holes") Signed-off-by: Pavel Tatashin <> Acked-by: Michal Hocko <> Reviewed-by: Andrew Morton <> Cc: Vlastimil Babka <> Cc: Steven Sistare <> Cc: Daniel Jordan <> Cc: "Kirill A. Shutemov" <> Cc: <> Signed-off-by: Andrew Morton <> Signed-off-by: Linus Torvalds <>
1 files changed, 1 insertions, 1 deletions
diff --git a/mm/sparse.c b/mm/sparse.c
index 62eef264a7bd..73dc2fcc0eab 100644
--- a/mm/sparse.c
+++ b/mm/sparse.c
@@ -629,7 +629,7 @@ void offline_mem_sections(unsigned long start_pfn, unsigned long end_pfn)
unsigned long pfn;
for (pfn = start_pfn; pfn < end_pfn; pfn += PAGES_PER_SECTION) {
- unsigned long section_nr = pfn_to_section_nr(start_pfn);
+ unsigned long section_nr = pfn_to_section_nr(pfn);
struct mem_section *ms;