On Mon, Jun 09, 2014 at 11:39:15AM +0200, Vlastimil Babka wrote: > commit d3132e4b83e6bd383c74d716f7281d7c3136089c upstream. > > Compaction caches pfn's for its migrate and free scanners to avoid > scanning the whole zone each time. In compact_zone(), the cached values > are read to set up initial values for the scanners. There are several > situations when these cached pfn's are reset to the first and last pfn > of the zone, respectively. One of these situations is when a compaction > has been deferred for a zone and is now being restarted during a direct > compaction, which is also done in compact_zone(). > > However, compact_zone() currently reads the cached pfn's *before* > resetting them. This means the reset doesn't affect the compaction that > performs it, and with good chance also subsequent compactions, as > update_pageblock_skip() is likely to be called and update the cached > pfn's to those being processed. Another chance for a successful reset > is when a direct compaction detects that migration and free scanners > meet (which has its own problems addressed by another patch) and sets > update_pageblock_skip flag which kswapd uses to do the reset because it > goes to sleep. > > This is clearly a bug that results in non-deterministic behavior, so > this patch moves the cached pfn reset to be performed *before* the > values are read. > > Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> > Acked-by: Mel Gorman <mgorman@xxxxxxx> > Acked-by: Rik van Riel <riel@xxxxxxxxxx> > Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> > Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > --- > I have realized that this should have been CC'd stable as well. It fixes a bug > that makes compaction nondeterministic and broken. <formletter> This is not the correct way to submit patches for inclusion in the stable kernel tree. Please read Documentation/stable_kernel_rules.txt for how to do this properly. </formletter> -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html