memcg, oom: notify on oom killer invocation from the charge path
Burt Holzman has noticed that memcg v1 doesn't notify about OOM events via eventfd anymore. The reason is that29ef680ae7
("memcg, oom: move out_of_memory back to the charge path") has moved the oom handling back to the charge path. While doing so the notification was left behind in mem_cgroup_oom_synchronize. Fix the issue by replicating the oom hierarchy locking and the notification. Link: http://lkml.kernel.org/r/20181224091107.18354-1-mhocko@kernel.org Fixes:29ef680ae7
("memcg, oom: move out_of_memory back to the charge path") Signed-off-by: Michal Hocko <mhocko@suse.com> Reported-by: Burt Holzman <burt@fnal.gov> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Cc: Vladimir Davydov <vdavydov.dev@gmail.com Cc: <stable@vger.kernel.org> [4.19+] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
7af7a8e19f
Коммит
7056d3a37d
|
@ -1673,6 +1673,9 @@ enum oom_status {
|
|||
|
||||
static enum oom_status mem_cgroup_oom(struct mem_cgroup *memcg, gfp_t mask, int order)
|
||||
{
|
||||
enum oom_status ret;
|
||||
bool locked;
|
||||
|
||||
if (order > PAGE_ALLOC_COSTLY_ORDER)
|
||||
return OOM_SKIPPED;
|
||||
|
||||
|
@ -1707,10 +1710,23 @@ static enum oom_status mem_cgroup_oom(struct mem_cgroup *memcg, gfp_t mask, int
|
|||
return OOM_ASYNC;
|
||||
}
|
||||
|
||||
if (mem_cgroup_out_of_memory(memcg, mask, order))
|
||||
return OOM_SUCCESS;
|
||||
mem_cgroup_mark_under_oom(memcg);
|
||||
|
||||
return OOM_FAILED;
|
||||
locked = mem_cgroup_oom_trylock(memcg);
|
||||
|
||||
if (locked)
|
||||
mem_cgroup_oom_notify(memcg);
|
||||
|
||||
mem_cgroup_unmark_under_oom(memcg);
|
||||
if (mem_cgroup_out_of_memory(memcg, mask, order))
|
||||
ret = OOM_SUCCESS;
|
||||
else
|
||||
ret = OOM_FAILED;
|
||||
|
||||
if (locked)
|
||||
mem_cgroup_oom_unlock(memcg);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Загрузка…
Ссылка в новой задаче