Thread (45 messages) 45 messages, 7 authors, 2021-08-05

Re: [External] Re: [PATCH 5/5] mm, memcg: always call __mod_node_page_state() with preempt disabled

From: Miaohe Lin <hidden>
Date: 2021-07-30 02:46:30
Also in: linux-mm, lkml

On 2021/7/30 10:33, Muchun Song wrote:
On Fri, Jul 30, 2021 at 9:52 AM Miaohe Lin [off-list ref] wrote:
quoted
On 2021/7/29 22:39, Shakeel Butt wrote:
quoted
On Thu, Jul 29, 2021 at 5:58 AM Miaohe Lin [off-list ref] wrote:
quoted
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 <redacted>
---
 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!
Hi Miaohe,

git show b4e0b68fbd9d can help you find out why we add
the rcu read lock around it.
Thanks for your tip. That's my overlook when I checked this commit. I should have looked at this
more closely. :(
Thanks.
quoted
quoted
quoted
                return;
        }

--
2.23.0
.
.
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help