|
@@ -1578,7 +1578,7 @@ enum compact_result try_to_compact_pages(gfp_t gfp_mask, unsigned int order,
|
|
|
int may_perform_io = gfp_mask & __GFP_IO;
|
|
|
struct zoneref *z;
|
|
|
struct zone *zone;
|
|
|
- enum compact_result rc = COMPACT_DEFERRED;
|
|
|
+ enum compact_result rc = COMPACT_SKIPPED;
|
|
|
int all_zones_contended = COMPACT_CONTENDED_LOCK; /* init for &= op */
|
|
|
|
|
|
*contended = COMPACT_CONTENDED_NONE;
|
|
@@ -1595,8 +1595,10 @@ enum compact_result try_to_compact_pages(gfp_t gfp_mask, unsigned int order,
|
|
|
enum compact_result status;
|
|
|
int zone_contended;
|
|
|
|
|
|
- if (compaction_deferred(zone, order))
|
|
|
+ if (compaction_deferred(zone, order)) {
|
|
|
+ rc = max_t(enum compact_result, COMPACT_DEFERRED, rc);
|
|
|
continue;
|
|
|
+ }
|
|
|
|
|
|
status = compact_zone_order(zone, order, gfp_mask, mode,
|
|
|
&zone_contended, alloc_flags,
|
|
@@ -1667,7 +1669,7 @@ break_loop:
|
|
|
* If at least one zone wasn't deferred or skipped, we report if all
|
|
|
* zones that were tried were lock contended.
|
|
|
*/
|
|
|
- if (rc > COMPACT_SKIPPED && all_zones_contended)
|
|
|
+ if (rc > COMPACT_INACTIVE && all_zones_contended)
|
|
|
*contended = COMPACT_CONTENDED_LOCK;
|
|
|
|
|
|
return rc;
|