diff --git a/mm/workingset.c b/mm/workingset.c index e9f05634747a..4fa33b57f0ca 100644 --- a/mm/workingset.c +++ b/mm/workingset.c @@ -272,7 +272,11 @@ static bool lru_gen_test_recent(void *shadow, struct lruvec **lruvec, unpack_shadow(shadow, &memcg_id, &pgdat, token, workingset); memcg = mem_cgroup_from_id(memcg_id); - *lruvec = mem_cgroup_lruvec(memcg, pgdat); + if(unlikely(!memcg)) { + *lruvec = &pgdat->__lruvec; + } else { + *lruvec = mem_cgroup_lruvec(memcg, pgdat); + } max_seq = READ_ONCE((*lruvec)->lrugen.max_seq); max_seq &= EVICTION_MASK >> LRU_REFS_WIDTH;