On Mon 06-03-23 23:41:37, Yue Zhao wrote: > The knob for cgroup v1 memory controller: memory.oom_control > is not protected by any locking so it can be modified while it is used. > This is not an actual problem because races are unlikely. > But it is better to use READ_ONCE/WRITE_ONCE to prevent compiler from > doing anything funky. > > The access of memcg->oom_kill_disable is lockless, > so it can be concurrently set at the same time as we are > trying to read it. > > Signed-off-by: Yue Zhao <findns94@xxxxxxxxx> > --- > mm/memcontrol.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index dca895c66a9b..26605b2f51b1 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -4515,7 +4515,7 @@ static int mem_cgroup_oom_control_read(struct seq_file *sf, void *v) > { > struct mem_cgroup *memcg = mem_cgroup_from_seq(sf); > > - seq_printf(sf, "oom_kill_disable %d\n", memcg->oom_kill_disable); > + seq_printf(sf, "oom_kill_disable %d\n", READ_ONCE(memcg->oom_kill_disable)); > seq_printf(sf, "under_oom %d\n", (bool)memcg->under_oom); > seq_printf(sf, "oom_kill %lu\n", > atomic_long_read(&memcg->memory_events[MEMCG_OOM_KILL])); > @@ -4531,7 +4531,7 @@ static int mem_cgroup_oom_control_write(struct cgroup_subsys_state *css, > if (mem_cgroup_is_root(memcg) || !((val == 0) || (val == 1))) > return -EINVAL; > > - memcg->oom_kill_disable = val; > + WRITE_ONCE(memcg->oom_kill_disable, val); > if (!val) > memcg_oom_recover(memcg); Any specific reasons you haven't covered other accesses (mem_cgroup_css_alloc, mem_cgroup_oom, mem_cgroup_oom_synchronize)? > > -- > 2.17.1 -- Michal Hocko SUSE Labs