On Thu, 2012-06-28 at 14:35 -0700, Andrew Morton wrote:On Thu, 28 Jun 2012 17:24:25 -0400 Rik van Riel<riel@xxxxxxxxxx> wrote:
@@ -463,6 +474,8 @@ static void isolate_freepages(struct zone *zone,
*/
if (isolated)
high_pfn = max(high_pfn, pfn);
+ if (cc->order> 0)
+ zone->compact_cached_free_pfn = high_pfn;
Is high_pfn guaranteed to be aligned to pageblock_nr_pages here? I
assume so, if lots of code in other places is correct but it's
unobvious from reading this function.
Reading the code a few more times, I believe that it is
indeed aligned to pageblock size.
I'll slip this into -next for a while.
--- a/mm/compaction.c~isolate_freepages-check-that-high_pfn-is-aligned-as-expected
+++ a/mm/compaction.c
@@ -456,6 +456,7 @@ static void isolate_freepages(struct zon
}
spin_unlock_irqrestore(&zone->lock, flags);
+ WARN_ON_ONCE(high_pfn& (pageblock_nr_pages - 1));
/*
* Record the highest PFN we isolated pages from. When next
* looking for free pages, the search will restart here as
I've triggered the following with today's -next: