Messages in this thread Patch in this message | | | From | Lorenzo Stoakes <> | Subject | [PATCH] mm/memcg: warn on missing memcg on mem_cgroup_page_lruvec() | Date | Wed, 25 Nov 2020 11:22:02 +0000 |
| |
Move memcg check to mem_cgroup_page_lruvec() as there are callers which may invoke this with !memcg in mem_cgroup_lruvec(), whereas they should not in mem_cgroup_page_lruvec().
We expect that we have always charged a page to the memcg before mem_cgroup_page_lruvec() is invoked, so add a warning to assert that this is the case.
Signed-off-by: Lorenzo Stoakes <lstoakes@gmail.com> Reported-by: syzbot+ce635500093181f39c1c@syzkaller.appspotmail.com --- include/linux/memcontrol.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 87ed56dc75f9..3e6a1df3bdb9 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -618,7 +618,6 @@ static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg, goto out; } - VM_WARN_ON_ONCE(!memcg); if (!memcg) memcg = root_mem_cgroup; @@ -645,7 +644,10 @@ static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg, static inline struct lruvec *mem_cgroup_page_lruvec(struct page *page, struct pglist_data *pgdat) { - return mem_cgroup_lruvec(page_memcg(page), pgdat); + struct mem_cgroup *memcg = page_memcg(page); + + VM_WARN_ON_ONCE_PAGE(!memcg, page); + return mem_cgroup_lruvec(memcg, pgdat); } static inline bool lruvec_holds_page_lru_lock(struct page *page, -- 2.29.2
| |