diff --git a/mm/workingset.c b/mm/workingset.c index e9f05634747a..dad8b16af105 100644 --- a/mm/workingset.c +++ b/mm/workingset.c @@ -266,13 +266,14 @@ static bool lru_gen_test_recent(void *shadow, struct lruvec **lruvec, { int memcg_id; unsigned long max_seq; - struct mem_cgroup *memcg; + struct mem_cgroup *memcg, *effective_memcg; struct pglist_data *pgdat; unpack_shadow(shadow, &memcg_id, &pgdat, token, workingset); memcg = mem_cgroup_from_id(memcg_id); - *lruvec = mem_cgroup_lruvec(memcg, pgdat); + effective_memcg = memcg ? : root_mem_cgroup; + *lruvec = mem_cgroup_lruvec(effective_memcg, pgdat); max_seq = READ_ONCE((*lruvec)->lrugen.max_seq); max_seq &= EVICTION_MASK >> LRU_REFS_WIDTH;