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 <[email protected]> > Acked-by: Mel Gorman <[email protected]> > Acked-by: Rik van Riel <[email protected]> > Cc: Joonsoo Kim <[email protected]> > Signed-off-by: Andrew Morton <[email protected]> > Signed-off-by: Linus Torvalds <[email protected]> > --- > 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 [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
