在 2020/11/25 上午1:59, Lorenzo Stoakes 写道: > On Tue, 24 Nov 2020 at 07:54, syzbot > <syzbot+ce635500093181f39c1c@xxxxxxxxxxxxxxxxxxxxxxxxx> wrote: >> syzbot found the following issue on: >> >> HEAD commit: d9137320 Add linux-next specific files for 20201124 > > This appears to be a product of 4b2904f3 ("mm/memcg: add missed > warning in mem_cgroup_lruvec") adding a VM_WARN_ON_ONCE() to > mem_cgroup_lruvec, which when invoked from a function other than > mem_cgroup_page_lruvec() can in fact be called with the condition > false. > If we move the check back into mem_cgroup_page_lruvec() it resolves > the issue. I enclose a simple version of this below, happy to submit > as a proper patch if this is the right approach: > > > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > index 87ed56dc75f9..27cc40a490b2 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,6 +644,7 @@ 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) > { > + VM_WARN_ON_ONCE_PAGE(!page_memcg(page), page); > return mem_cgroup_lruvec(page_memcg(page), pgdat); > } > Acked. Right. Would you like to remove the bad commit 4b2904f3 ("mm/memcg: add missed warning in mem_cgroup_lruvec") and replace yours. and further more, could you like try another patch? Thanks Alex >From 073b222bd06a96c39656b0460c705e48c7eedafc Mon Sep 17 00:00:00 2001 From: Alex Shi <alex.shi@xxxxxxxxxxxxxxxxx> Date: Wed, 25 Nov 2020 14:06:33 +0800 Subject: [PATCH] mm/memcg: bail out early when !memcg in mem_cgroup_lruvec In some scenarios, we call NULL memcg in mem_cgroup_lruvec(NULL, pgdat) so we could get out early to skip unnecessary check. Also warning if both parameter are NULL. Signed-off-by: Alex Shi <alex.shi@xxxxxxxxxxxxxxxxx> --- include/linux/memcontrol.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 3a995bb3157f..5e4da83eb9ce 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -613,7 +613,9 @@ static inline struct lruvec *mem_cgroup_lruvec(struct mem_cgroup *memcg, struct mem_cgroup_per_node *mz; struct lruvec *lruvec; - if (mem_cgroup_disabled()) { + VM_WARN_ON_ONCE(!memcg && !pgdat); + + if (mem_cgroup_disabled() || !memcg) { lruvec = &pgdat->__lruvec; goto out; } -- 2.29.GIT