Message ID | d1e9fbc0379fe8db475d82c8b6fbe048876e12ae.1584034301.git.chris@chrisdown.name (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm, memcg: cgroup v2 tunable load/store tearing fixes | expand |
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@chrisdown.name> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Johannes Weiner <hannes@cmpxchg.org> > Cc: Roman Gushchin <guro@fb.com> > Cc: Tejun Heo <tj@kernel.org> > Cc: linux-mm@kvack.org > Cc: cgroups@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > Cc: kernel-team@fb.com Acked-by: Michal Hocko <mhocko@suse.com> > --- > 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
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;
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@chrisdown.name> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Roman Gushchin <guro@fb.com> Cc: Tejun Heo <tj@kernel.org> Cc: linux-mm@kvack.org Cc: cgroups@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: kernel-team@fb.com --- mm/memcontrol.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)