mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
mm: compaction: abort compaction loop if lock is contended or run too long
isolate_migratepages_range() might isolate no pages if for example when zone->lru_lock is contended and running asynchronous compaction. In this case, we should abort compaction, otherwise, compact_zone will run a useless loop and make zone->lru_lock is even contended. An additional check is added to ensure that cc.migratepages and cc.freepages get properly drained whan compaction is aborted. [[email protected]: Putback pages isolated for migration if aborting] [[email protected]: compact_zone_order requires non-NULL arg contended] [[email protected]: make compact_zone_order() require non-NULL arg `contended'] [[email protected]: Putback pages isolated for migration if aborting] Signed-off-by: Andrea Arcangeli <[email protected]> Signed-off-by: Shaohua Li <[email protected]> Signed-off-by: Mel Gorman <[email protected]> Acked-by: Minchan Kim <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
f2d52fe51c
commit
e64c5237cf
2 changed files with 13 additions and 6 deletions
|
|
@ -130,7 +130,7 @@ struct compact_control {
|
|||
int order; /* order a direct compactor needs */
|
||||
int migratetype; /* MOVABLE, RECLAIMABLE etc */
|
||||
struct zone *zone;
|
||||
bool *contended; /* True if a lock was contended */
|
||||
bool contended; /* True if a lock was contended */
|
||||
struct page **page; /* Page captured of requested size */
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue