• Mel Gorman's avatar
    mm: compaction: determine if dirty pages can be migrated without blocking within ->migratepage · 41927678
    Mel Gorman authored
    commit b969c4ab upstream.
    
    Stable note: Not tracked in Bugzilla. A fix aimed at preserving page
    	aging information by reducing LRU list churning had the side-effect
    	of reducing THP allocation success rates. This was part of a series
    	to restore the success rates while preserving the reclaim fix.
    
    Asynchronous compaction is used when allocating transparent hugepages to
    avoid blocking for long periods of time.  Due to reports of stalling,
    there was a debate on disabling synchronous compaction but this severely
    impacted allocation success rates.  Part of the reason was that many dirty
    pages are skipped in asynchronous compaction by the following check;
    
    	if (PageDirty(page) && !sync &&
    		mapping->a_ops->migratepage != migrate_page)
    			rc = -EBUSY;
    
    This skips over all mapping aops using buffer_migrate_page() even though
    it is possible to migrate some of these pages without blocking....
    41927678
internal.h 12.7 KB