If there is no memcg eligible for reclaim because all groups under the reclaimed hierarchy are within their guarantee then the global direct reclaim would end up in the endless loop because zones in the zonelists are not considered unreclaimable (as per all_unreclaimable) and so the OOM killer would never fire and direct reclaim would be triggered without no chance to reclaim anything. This is not possible yet because reclaim falls back to ignore low_limit when nobody is eligible for reclaim. Following patch will allow to set the fallback mode to hard guarantee, though, so this is a preparatory patch. Memcg reclaim doesn't suffer from this because the OOM killer is triggered after few unsuccessful attempts of the reclaim. Fix this by checking the number of scanned pages which is obviously 0 if nobody is eligible and also check that the whole tree hierarchy is not eligible and tell OOM it can go ahead. Signed-off-by: Michal Hocko <mhocko@xxxxxxx> --- mm/vmscan.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mm/vmscan.c b/mm/vmscan.c index 8041b0667673..99137aecd95f 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2570,6 +2570,13 @@ out: if (aborted_reclaim) return 1; + /* + * If the target memcg is not eligible for reclaim then we have no option + * but OOM + */ + if (!sc->nr_scanned && mem_cgroup_all_within_guarantee(sc->target_mem_cgroup)) + return 0; + /* top priority shrink_zones still had more to do? don't OOM, then */ if (global_reclaim(sc) && !all_unreclaimable(zonelist, sc)) return 1; -- 2.0.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>