|
@@ -2318,6 +2318,7 @@ static bool shrink_zones(struct zonelist *zonelist, struct scan_control *sc)
|
|
struct shrink_control shrink = {
|
|
struct shrink_control shrink = {
|
|
.gfp_mask = sc->gfp_mask,
|
|
.gfp_mask = sc->gfp_mask,
|
|
};
|
|
};
|
|
|
|
+ enum zone_type requested_highidx = gfp_zone(sc->gfp_mask);
|
|
|
|
|
|
/*
|
|
/*
|
|
* If the number of buffer_heads in the machine exceeds the maximum
|
|
* If the number of buffer_heads in the machine exceeds the maximum
|
|
@@ -2358,7 +2359,8 @@ static bool shrink_zones(struct zonelist *zonelist, struct scan_control *sc)
|
|
* noticeable problem, like transparent huge
|
|
* noticeable problem, like transparent huge
|
|
* page allocations.
|
|
* page allocations.
|
|
*/
|
|
*/
|
|
- if (compaction_ready(zone, sc)) {
|
|
|
|
|
|
+ if ((zonelist_zone_idx(z) <= requested_highidx)
|
|
|
|
+ && compaction_ready(zone, sc)) {
|
|
aborted_reclaim = true;
|
|
aborted_reclaim = true;
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|