On 2021/7/29 22:39, Shakeel Butt wrote: > 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(). > I thought it's used to protect __mod_node_page_state(). Looks somewhat confusing for me. Many thanks for pointing this out! >> return; >> } >> >> -- >> 2.23.0 >> > . >