On Thu 12-03-20 17:33:16, Chris Down wrote: > The read side of this is all protected, but we can still tear if > multiple iterations of mem_cgroup_protected are going at the same time. > > There's some intentional racing in mem_cgroup_protected which is ok, but > load/store tearing should be avoided. > > Signed-off-by: Chris Down <chris@xxxxxxxxxxxxxx> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Cc: Johannes Weiner <hannes@xxxxxxxxxxx> > Cc: Roman Gushchin <guro@xxxxxx> > Cc: Tejun Heo <tj@xxxxxxxxxx> > Cc: linux-mm@xxxxxxxxx > Cc: cgroups@xxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > Cc: kernel-team@xxxxxx Acked-by: Michal Hocko <mhocko@xxxxxxxx> > --- > mm/memcontrol.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 57048a38c75d..e9af606238ab 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -6301,8 +6301,8 @@ enum mem_cgroup_protection mem_cgroup_protected(struct mem_cgroup *root, > } > > exit: > - memcg->memory.emin = emin; > - memcg->memory.elow = elow; > + WRITE_ONCE(memcg->memory.emin, emin); > + WRITE_ONCE(memcg->memory.elow, elow); > > if (usage <= emin) > return MEMCG_PROT_MIN; > -- > 2.25.1 -- Michal Hocko SUSE Labs