On Thu, Jul 29, 2021 at 5:58 AM Miaohe Lin <linmiaohe@xxxxxxxxxx> wrote: > > We should always ensure __mod_node_page_state() is called with preempt > disabled or percpu ops may manipulate the wrong cpu when preempt happened. > > Fixes: b4e0b68fbd9d ("mm: memcontrol: use obj_cgroup APIs to charge kmem pages") > Signed-off-by: Miaohe Lin <linmiaohe@xxxxxxxxxx> > --- > mm/memcontrol.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 70a32174e7c4..616d1a72ece3 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -697,8 +697,8 @@ void __mod_lruvec_page_state(struct page *page, enum node_stat_item idx, > memcg = page_memcg(head); > /* Untracked pages have no memcg, no lruvec. Update only the node */ > if (!memcg) { > - rcu_read_unlock(); > __mod_node_page_state(pgdat, idx, val); > + rcu_read_unlock(); This rcu is for page_memcg. The preemption and interrupts are disabled across __mod_lruvec_page_state(). > return; > } > > -- > 2.23.0 >