diff --git a/mm/workingset.c b/mm/workingset.c index e9f05634747a..a848572f8c8a 100644 --- a/mm/workingset.c +++ b/mm/workingset.c @@ -270,7 +270,13 @@ static bool lru_gen_test_recent(void *shadow, struct lruvec **lruvec, struct pglist_data *pgdat; unpack_shadow(shadow, &memcg_id, &pgdat, token, workingset); - + if (unlikely(!pgdat)) { + pr_warn("FATAL: Corrupted shadow entry - pgdat is NULL! shadow=%p\n", shadow); + pr_warn("This indicates page cache corruption - cannot proceed\n"); + dump_stack(); + *lruvec = NULL; + return false; + } memcg = mem_cgroup_from_id(memcg_id); *lruvec = mem_cgroup_lruvec(memcg, pgdat);