Commit dbc0e4cefd003834440fe7ac5464616c5235cb94

Authored by KAMEZAWA Hiroyuki
Committed by Linus Torvalds
1 parent 3ad33b2436

memory hotremove: unset migrate type "ISOLATE" after removal

We should unset migrate type "ISOLATE" when we successfully removed memory.
 But current code has BUG and cannot works well.

This patch also includes bugfix?  to change get_pageblock_flags to
get_pageblock_migratetype().

Thanks to Badari Pulavarty for finding this.

Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Acked-by: Badari Pulavarty <pbadari@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 2 changed files with 5 additions and 5 deletions Side-by-side Diff

... ... @@ -574,8 +574,8 @@
574 574 /* Ok, all of our target is islaoted.
575 575 We cannot do rollback at this point. */
576 576 offline_isolated_pages(start_pfn, end_pfn);
577   - /* reset pagetype flags */
578   - start_isolate_page_range(start_pfn, end_pfn);
  577 + /* reset pagetype flags and makes migrate type to be MOVABLE */
  578 + undo_isolate_page_range(start_pfn, end_pfn);
579 579 /* removal success */
580 580 zone->present_pages -= offlined_pages;
581 581 zone->zone_pgdat->node_present_pages -= offlined_pages;
... ... @@ -55,7 +55,7 @@
55 55 return 0;
56 56 undo:
57 57 for (pfn = start_pfn;
58   - pfn <= undo_pfn;
  58 + pfn < undo_pfn;
59 59 pfn += pageblock_nr_pages)
60 60 unset_migratetype_isolate(pfn_to_page(pfn));
61 61  
... ... @@ -76,7 +76,7 @@
76 76 pfn < end_pfn;
77 77 pfn += pageblock_nr_pages) {
78 78 page = __first_valid_page(pfn, pageblock_nr_pages);
79   - if (!page || get_pageblock_flags(page) != MIGRATE_ISOLATE)
  79 + if (!page || get_pageblock_migratetype(page) != MIGRATE_ISOLATE)
80 80 continue;
81 81 unset_migratetype_isolate(page);
82 82 }
... ... @@ -126,7 +126,7 @@
126 126 */
127 127 for (pfn = start_pfn; pfn < end_pfn; pfn += pageblock_nr_pages) {
128 128 page = __first_valid_page(pfn, pageblock_nr_pages);
129   - if (page && get_pageblock_flags(page) != MIGRATE_ISOLATE)
  129 + if (page && get_pageblock_migratetype(page) != MIGRATE_ISOLATE)
130 130 break;
131 131 }
132 132 if (pfn < end_pfn)