The commit is pushed to "branch-rh9-5.14.0-162.6.1.vz9.18.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh9-5.14.0-162.6.1.vz9.18.10 ------> commit 6c6835cdae7442cfbf7bfbac5ff157754eb18266 Author: Alexander Atanasov <alexander.atana...@virtuozzo.com> Date: Wed Feb 15 10:57:56 2023 +0200
mm: Fix mem_cgroup_migrate's warn_on itself The original check in vz7 commit only expected to have Anon,Swap and Cached pages. Which is not a valid assumption any more since folios have more folio types. To fix this update the condition to handle more folio types and change its logic to be in form of: flag && (any other flag) rather than flag != (!any other flag). Do this to avoid warn_on if new flags are added. Ressurect and rewrite a comment about what does the check do, also put an explanation why the check is in mem_cgroup_migrate() and not when updating the flags. Fixes: b8bc3dbf5e18 ("mm: per memory cgroup page cache limit") https://jira.sw.ru/browse/PSBM-144609 Signed-off-by: Alexander Atanasov <alexander.atana...@virtuozzo.com> --- mm/memcontrol.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 9f566fd438ef..8cd3a134c226 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -7687,8 +7687,25 @@ void mem_cgroup_migrate(struct folio *old, struct folio *new) page_counter_charge(&memcg->memsw, nr_pages); } - WARN_ON((!PageAnon(&new->page) && !PageSwapBacked(&new->page)) != - folio_memcg_cache(new)); + /* + * finist explained the idea behind adding a WARN_ON() here: + * - we do not want to check flags correctness on each flag change + * because of performance + * - we do want to have a warning in case we somehow messed-up and + * have got a folio with wrong bits set + * - we do not insist to catch every first buggy page with wrong + * bits + * + * But we still want to get a warning about the problem sooner or + * later if the problem with flags exists. + * + * To achieve this check if a folio that is marked as cache does + * not have any other incompatible flags set. + */ + WARN_ON(folio_memcg_cache(new) && + (folio_test_slab(new) || folio_test_anon(new) || + folio_test_swapbacked(new) || folio_test_swapcache(new) || + folio_test_mappedtodisk(new) || folio_test_ksm(new))); if (folio_memcg_cache(new)) page_counter_charge(&memcg->cache, nr_pages); _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel