From: Michal Hocko <mhocko@suse.com> To: Johannes Weiner <hannes@cmpxchg.org> Cc: "Andrew Morton" <akpm@linux-foundation.org>, "Roman Gushchin" <guro@fb.com>, "Shakeel Butt" <shakeelb@google.com>, "Tejun Heo" <tj@kernel.org>, "Michal Koutný" <mkoutny@suse.com>, cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel-team@fb.com Subject: Re: [PATCH] mm: memcontrol: switch to rstat fix Date: Tue, 16 Mar 2021 10:30:54 +0100 [thread overview] Message-ID: <YFB6zkqXx+Z+pO+q@dhcp22.suse.cz> (raw) In-Reply-To: <20210315234100.64307-1-hannes@cmpxchg.org> On Mon 15-03-21 19:41:00, Johannes Weiner wrote: > Fix a sleep in atomic section problem: wb_writeback() takes a spinlock > and calls wb_over_bg_thresh() -> mem_cgroup_wb_stats, but the regular > rstat flushing function called from in there does lockbreaking and may > sleep. Switch to the atomic variant, cgroup_rstat_irqsafe(). > > To be consistent with other memcg flush calls, but without adding > another memcg wrapper, inline and drop memcg_flush_vmstats() instead. > > Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Michal Hocko <mhocko@suse.com> > --- > mm/memcontrol.c | 15 +++++---------- > 1 file changed, 5 insertions(+), 10 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index f7fb12d3c2fc..9091913ec877 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -757,11 +757,6 @@ mem_cgroup_largest_soft_limit_node(struct mem_cgroup_tree_per_node *mctz) > return mz; > } > > -static void memcg_flush_vmstats(struct mem_cgroup *memcg) > -{ > - cgroup_rstat_flush(memcg->css.cgroup); > -} > - > /** > * __mod_memcg_state - update cgroup memory statistics > * @memcg: the memory cgroup > @@ -1572,7 +1567,7 @@ static char *memory_stat_format(struct mem_cgroup *memcg) > * > * Current memory state: > */ > - memcg_flush_vmstats(memcg); > + cgroup_rstat_flush(memcg->css.cgroup); > > for (i = 0; i < ARRAY_SIZE(memory_stats); i++) { > u64 size; > @@ -3523,7 +3518,7 @@ static unsigned long mem_cgroup_usage(struct mem_cgroup *memcg, bool swap) > unsigned long val; > > if (mem_cgroup_is_root(memcg)) { > - memcg_flush_vmstats(memcg); > + cgroup_rstat_flush(memcg->css.cgroup); > val = memcg_page_state(memcg, NR_FILE_PAGES) + > memcg_page_state(memcg, NR_ANON_MAPPED); > if (swap) > @@ -3925,7 +3920,7 @@ static int memcg_numa_stat_show(struct seq_file *m, void *v) > int nid; > struct mem_cgroup *memcg = mem_cgroup_from_seq(m); > > - memcg_flush_vmstats(memcg); > + cgroup_rstat_flush(memcg->css.cgroup); > > for (stat = stats; stat < stats + ARRAY_SIZE(stats); stat++) { > seq_printf(m, "%s=%lu", stat->name, > @@ -3997,7 +3992,7 @@ static int memcg_stat_show(struct seq_file *m, void *v) > > BUILD_BUG_ON(ARRAY_SIZE(memcg1_stat_names) != ARRAY_SIZE(memcg1_stats)); > > - memcg_flush_vmstats(memcg); > + cgroup_rstat_flush(memcg->css.cgroup); > > for (i = 0; i < ARRAY_SIZE(memcg1_stats); i++) { > unsigned long nr; > @@ -4500,7 +4495,7 @@ void mem_cgroup_wb_stats(struct bdi_writeback *wb, unsigned long *pfilepages, > struct mem_cgroup *memcg = mem_cgroup_from_css(wb->memcg_css); > struct mem_cgroup *parent; > > - memcg_flush_vmstats(memcg); > + cgroup_rstat_flush_irqsafe(memcg->css.cgroup); > > *pdirty = memcg_page_state(memcg, NR_FILE_DIRTY); > *pwriteback = memcg_page_state(memcg, NR_WRITEBACK); > -- > 2.30.1 -- Michal Hocko SUSE Labs
WARNING: multiple messages have this Message-ID (diff)
From: Michal Hocko <mhocko-IBi9RG/b67k@public.gmane.org> To: Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org> Cc: "Andrew Morton" <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>, "Roman Gushchin" <guro-b10kYP2dOMg@public.gmane.org>, "Shakeel Butt" <shakeelb-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>, "Tejun Heo" <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>, "Michal Koutný" <mkoutny-IBi9RG/b67k@public.gmane.org>, cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kernel-team-b10kYP2dOMg@public.gmane.org Subject: Re: [PATCH] mm: memcontrol: switch to rstat fix Date: Tue, 16 Mar 2021 10:30:54 +0100 [thread overview] Message-ID: <YFB6zkqXx+Z+pO+q@dhcp22.suse.cz> (raw) In-Reply-To: <20210315234100.64307-1-hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org> On Mon 15-03-21 19:41:00, Johannes Weiner wrote: > Fix a sleep in atomic section problem: wb_writeback() takes a spinlock > and calls wb_over_bg_thresh() -> mem_cgroup_wb_stats, but the regular > rstat flushing function called from in there does lockbreaking and may > sleep. Switch to the atomic variant, cgroup_rstat_irqsafe(). > > To be consistent with other memcg flush calls, but without adding > another memcg wrapper, inline and drop memcg_flush_vmstats() instead. > > Signed-off-by: Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org> Acked-by: Michal Hocko <mhocko-IBi9RG/b67k@public.gmane.org> > --- > mm/memcontrol.c | 15 +++++---------- > 1 file changed, 5 insertions(+), 10 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index f7fb12d3c2fc..9091913ec877 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -757,11 +757,6 @@ mem_cgroup_largest_soft_limit_node(struct mem_cgroup_tree_per_node *mctz) > return mz; > } > > -static void memcg_flush_vmstats(struct mem_cgroup *memcg) > -{ > - cgroup_rstat_flush(memcg->css.cgroup); > -} > - > /** > * __mod_memcg_state - update cgroup memory statistics > * @memcg: the memory cgroup > @@ -1572,7 +1567,7 @@ static char *memory_stat_format(struct mem_cgroup *memcg) > * > * Current memory state: > */ > - memcg_flush_vmstats(memcg); > + cgroup_rstat_flush(memcg->css.cgroup); > > for (i = 0; i < ARRAY_SIZE(memory_stats); i++) { > u64 size; > @@ -3523,7 +3518,7 @@ static unsigned long mem_cgroup_usage(struct mem_cgroup *memcg, bool swap) > unsigned long val; > > if (mem_cgroup_is_root(memcg)) { > - memcg_flush_vmstats(memcg); > + cgroup_rstat_flush(memcg->css.cgroup); > val = memcg_page_state(memcg, NR_FILE_PAGES) + > memcg_page_state(memcg, NR_ANON_MAPPED); > if (swap) > @@ -3925,7 +3920,7 @@ static int memcg_numa_stat_show(struct seq_file *m, void *v) > int nid; > struct mem_cgroup *memcg = mem_cgroup_from_seq(m); > > - memcg_flush_vmstats(memcg); > + cgroup_rstat_flush(memcg->css.cgroup); > > for (stat = stats; stat < stats + ARRAY_SIZE(stats); stat++) { > seq_printf(m, "%s=%lu", stat->name, > @@ -3997,7 +3992,7 @@ static int memcg_stat_show(struct seq_file *m, void *v) > > BUILD_BUG_ON(ARRAY_SIZE(memcg1_stat_names) != ARRAY_SIZE(memcg1_stats)); > > - memcg_flush_vmstats(memcg); > + cgroup_rstat_flush(memcg->css.cgroup); > > for (i = 0; i < ARRAY_SIZE(memcg1_stats); i++) { > unsigned long nr; > @@ -4500,7 +4495,7 @@ void mem_cgroup_wb_stats(struct bdi_writeback *wb, unsigned long *pfilepages, > struct mem_cgroup *memcg = mem_cgroup_from_css(wb->memcg_css); > struct mem_cgroup *parent; > > - memcg_flush_vmstats(memcg); > + cgroup_rstat_flush_irqsafe(memcg->css.cgroup); > > *pdirty = memcg_page_state(memcg, NR_FILE_DIRTY); > *pwriteback = memcg_page_state(memcg, NR_WRITEBACK); > -- > 2.30.1 -- Michal Hocko SUSE Labs
next prev parent reply other threads:[~2021-03-16 9:31 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-03-15 23:41 [PATCH] mm: memcontrol: switch to rstat fix Johannes Weiner 2021-03-15 23:58 ` Shakeel Butt 2021-03-16 0:52 ` Singh, Balbir 2021-03-16 0:52 ` Singh, Balbir 2021-03-16 9:30 ` Michal Hocko [this message] 2021-03-16 9:30 ` Michal Hocko 2021-03-17 19:19 ` Michal Koutný 2021-03-17 19:19 ` Michal Koutný
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=YFB6zkqXx+Z+pO+q@dhcp22.suse.cz \ --to=mhocko@suse.com \ --cc=akpm@linux-foundation.org \ --cc=cgroups@vger.kernel.org \ --cc=guro@fb.com \ --cc=hannes@cmpxchg.org \ --cc=kernel-team@fb.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mkoutny@suse.com \ --cc=shakeelb@google.com \ --cc=tj@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.