Re: [PATCH 1/7] mm: memcontrol: fix page charging in page replacement
On Tue 13-04-21 14:51:47, Muchun Song wrote: > The pages aren't accounted at the root level, so do not charge the page > to the root memcg in page replacement. Although we do not display the > value (mem_cgroup_usage) so there shouldn't be any actual problem, but > there is a WARN_ON_ONCE in the page_counter_cancel(). Who knows if it > will trigger? So it is better to fix it. > > Signed-off-by: Muchun Song > Acked-by: Johannes Weiner > Reviewed-by: Shakeel Butt Acked-by: Michal Hocko > --- > mm/memcontrol.c | 8 +--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 64ada9e650a5..f229de925aa5 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -6806,9 +6806,11 @@ void mem_cgroup_migrate(struct page *oldpage, struct > page *newpage) > /* Force-charge the new page. The old one will be freed soon */ > nr_pages = thp_nr_pages(newpage); > > - page_counter_charge(>memory, nr_pages); > - if (do_memsw_account()) > - page_counter_charge(>memsw, nr_pages); > + if (!mem_cgroup_is_root(memcg)) { > + page_counter_charge(>memory, nr_pages); > + if (do_memsw_account()) > + page_counter_charge(>memsw, nr_pages); > + } > > css_get(>css); > commit_charge(newpage, memcg); > -- > 2.11.0 -- Michal Hocko SUSE Labs
Re: [PATCH 1/7] mm: memcontrol: fix page charging in page replacement
On Tue, Apr 13, 2021 at 02:51:47PM +0800, Muchun Song wrote: > The pages aren't accounted at the root level, so do not charge the page > to the root memcg in page replacement. Although we do not display the > value (mem_cgroup_usage) so there shouldn't be any actual problem, but > there is a WARN_ON_ONCE in the page_counter_cancel(). Who knows if it > will trigger? So it is better to fix it. > > Signed-off-by: Muchun Song > Acked-by: Johannes Weiner > Reviewed-by: Shakeel Butt Acked-by: Roman Gushchin Thanks! > --- > mm/memcontrol.c | 8 +--- > 1 file changed, 5 insertions(+), 3 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 64ada9e650a5..f229de925aa5 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -6806,9 +6806,11 @@ void mem_cgroup_migrate(struct page *oldpage, struct > page *newpage) > /* Force-charge the new page. The old one will be freed soon */ > nr_pages = thp_nr_pages(newpage); > > - page_counter_charge(>memory, nr_pages); > - if (do_memsw_account()) > - page_counter_charge(>memsw, nr_pages); > + if (!mem_cgroup_is_root(memcg)) { > + page_counter_charge(>memory, nr_pages); > + if (do_memsw_account()) > + page_counter_charge(>memsw, nr_pages); > + } > > css_get(>css); > commit_charge(newpage, memcg); > -- > 2.11.0 >
[PATCH 1/7] mm: memcontrol: fix page charging in page replacement
The pages aren't accounted at the root level, so do not charge the page to the root memcg in page replacement. Although we do not display the value (mem_cgroup_usage) so there shouldn't be any actual problem, but there is a WARN_ON_ONCE in the page_counter_cancel(). Who knows if it will trigger? So it is better to fix it. Signed-off-by: Muchun Song Acked-by: Johannes Weiner Reviewed-by: Shakeel Butt --- mm/memcontrol.c | 8 +--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 64ada9e650a5..f229de925aa5 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -6806,9 +6806,11 @@ void mem_cgroup_migrate(struct page *oldpage, struct page *newpage) /* Force-charge the new page. The old one will be freed soon */ nr_pages = thp_nr_pages(newpage); - page_counter_charge(>memory, nr_pages); - if (do_memsw_account()) - page_counter_charge(>memsw, nr_pages); + if (!mem_cgroup_is_root(memcg)) { + page_counter_charge(>memory, nr_pages); + if (do_memsw_account()) + page_counter_charge(>memsw, nr_pages); + } css_get(>css); commit_charge(newpage, memcg); -- 2.11.0