Messages in this thread | | | Date | Mon, 6 Mar 2023 18:50:15 +0100 | From | Michal Hocko <> | Subject | Re: [PATCH v2, 2/4] mm, memcg: Prevent memory.swappiness load/store tearing |
| |
On Mon 06-03-23 23:41:36, Yue Zhao wrote: > The knob for cgroup v1 memory controller: memory.swappiness > 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->swappiness and vm_swappiness is lockless, > so both of them can be concurrently set at the same time > as we are trying to read them. > > Signed-off-by: Yue Zhao <findns94@gmail.com>
Acked-by: Michal Hocko <mhocko@suse.com> Thanks!
> --- > include/linux/swap.h | 8 ++++---- > mm/memcontrol.c | 4 ++-- > 2 files changed, 6 insertions(+), 6 deletions(-) > > diff --git a/include/linux/swap.h b/include/linux/swap.h > index 209a425739a9..3f3fe43d1766 100644 > --- a/include/linux/swap.h > +++ b/include/linux/swap.h > @@ -620,18 +620,18 @@ static inline int mem_cgroup_swappiness(struct mem_cgroup *memcg) > { > /* Cgroup2 doesn't have per-cgroup swappiness */ > if (cgroup_subsys_on_dfl(memory_cgrp_subsys)) > - return vm_swappiness; > + return READ_ONCE(vm_swappiness); > > /* root ? */ > if (mem_cgroup_disabled() || mem_cgroup_is_root(memcg)) > - return vm_swappiness; > + return READ_ONCE(vm_swappiness); > > - return memcg->swappiness; > + return READ_ONCE(memcg->swappiness); > } > #else > static inline int mem_cgroup_swappiness(struct mem_cgroup *mem) > { > - return vm_swappiness; > + return READ_ONCE(vm_swappiness); > } > #endif > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 06821e5f7604..dca895c66a9b 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -4179,9 +4179,9 @@ static int mem_cgroup_swappiness_write(struct cgroup_subsys_state *css, > return -EINVAL; > > if (!mem_cgroup_is_root(memcg)) > - memcg->swappiness = val; > + WRITE_ONCE(memcg->swappiness, val); > else > - vm_swappiness = val; > + WRITE_ONCE(vm_swappiness, val); > > return 0; > } > -- > 2.17.1
-- Michal Hocko SUSE Labs
| |