Acked-by: Alex Shi <alex.shi@xxxxxxxxxxxxxxxxx> 在 2020/11/25 下午7:22, Lorenzo Stoakes 写道: > 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@xxxxxxxxx> > Reported-by: syzbot+ce635500093181f39c1c@xxxxxxxxxxxxxxxxxxxxxxxxx > --- > 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, >