Commit 4f9a358c authored by Michal Hocko's avatar Michal Hocko Committed by Linus Torvalds

mm, compaction: update compaction_result ordering

compaction_result will be used as the primary feedback channel for
compaction users.  At the same time try_to_compact_pages (and
potentially others) assume a certain ordering where a more specific
feedback takes precendence.

This gets a bit awkward when we have conflicting feedback from different
zones.  E.g one returing COMPACT_COMPLETE meaning the full zone has been
scanned without any outcome while other returns with COMPACT_PARTIAL aka
made some progress.  The caller should get COMPACT_PARTIAL because that
means that the compaction still can make some progress.  The same
applies for COMPACT_PARTIAL vs COMPACT_PARTIAL_SKIPPED.

Reorder PARTIAL to be the largest one so the larger the value is the
more progress we have done.
Signed-off-by: default avatarMichal Hocko <mhocko@suse.com>
Acked-by: default avatarVlastimil Babka <vbabka@suse.cz>
Acked-by: default avatarHillf Danton <hillf.zj@alibaba-inc.com>
Cc: David Rientjes <rientjes@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Joonsoo Kim <js1304@gmail.com>
Cc: Mel Gorman <mgorman@techsingularity.net>
Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Cc: Vladimir Davydov <vdavydov@virtuozzo.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent c8f7de0b
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
/* Return values for compact_zone() and try_to_compact_pages() */ /* Return values for compact_zone() and try_to_compact_pages() */
/* When adding new states, please adjust include/trace/events/compaction.h */ /* When adding new states, please adjust include/trace/events/compaction.h */
enum compact_result { enum compact_result {
/* For more detailed tracepoint output - internal to compaction */
COMPACT_NOT_SUITABLE_ZONE,
/* /*
* compaction didn't start as it was not possible or direct reclaim * compaction didn't start as it was not possible or direct reclaim
* was more suitable * was more suitable
...@@ -11,30 +13,34 @@ enum compact_result { ...@@ -11,30 +13,34 @@ enum compact_result {
COMPACT_SKIPPED, COMPACT_SKIPPED,
/* compaction didn't start as it was deferred due to past failures */ /* compaction didn't start as it was deferred due to past failures */
COMPACT_DEFERRED, COMPACT_DEFERRED,
/* compaction not active last round */ /* compaction not active last round */
COMPACT_INACTIVE = COMPACT_DEFERRED, COMPACT_INACTIVE = COMPACT_DEFERRED,
/* For more detailed tracepoint output - internal to compaction */
COMPACT_NO_SUITABLE_PAGE,
/* compaction should continue to another pageblock */ /* compaction should continue to another pageblock */
COMPACT_CONTINUE, COMPACT_CONTINUE,
/* /*
* direct compaction partially compacted a zone and there are suitable * The full zone was compacted scanned but wasn't successfull to compact
* pages * suitable pages.
*/ */
COMPACT_PARTIAL, COMPACT_COMPLETE,
/* /*
* direct compaction has scanned part of the zone but wasn't successfull * direct compaction has scanned part of the zone but wasn't successfull
* to compact suitable pages. * to compact suitable pages.
*/ */
COMPACT_PARTIAL_SKIPPED, COMPACT_PARTIAL_SKIPPED,
/* compaction terminated prematurely due to lock contentions */
COMPACT_CONTENDED,
/* /*
* The full zone was compacted scanned but wasn't successfull to compact * direct compaction partially compacted a zone and there might be
* suitable pages. * suitable pages
*/ */
COMPACT_COMPLETE, COMPACT_PARTIAL,
/* For more detailed tracepoint output */
COMPACT_NO_SUITABLE_PAGE,
COMPACT_NOT_SUITABLE_ZONE,
COMPACT_CONTENDED,
}; };
/* Used to signal whether compaction detected need_sched() or lock contention */ /* Used to signal whether compaction detected need_sched() or lock contention */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment