memcg: return the folio in union mc_target
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Thu, 11 Jan 2024 18:12:17 +0000 (18:12 +0000)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 22 Feb 2024 00:00:03 +0000 (16:00 -0800)
All users of target.page convert it to the folio, so we can just return
the folio directly and save a few calls to compound_head().

Link: https://lkml.kernel.org/r/20240111181219.3462852-3-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Reviewed-by: Roman Gushchin <roman.gushchin@linux.dev>
Reviewed-by: Muchun Song <muchun.song@linux.dev>
Acked-by: Shakeel Butt <shakeelb@google.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/memcontrol.c

index d1c1bd1663078cb91b8b36598e61c53b1814b6a0..f52cbc42359e5e549250f365f31d4b15233ebd32 100644 (file)
@@ -5873,7 +5873,7 @@ static int mem_cgroup_do_precharge(unsigned long count)
 }
 
 union mc_target {
-       struct page     *page;
+       struct folio    *folio;
        swp_entry_t     ent;
 };
 
@@ -6095,7 +6095,7 @@ out:
  * Return:
  * * MC_TARGET_NONE - If the pte is not a target for move charge.
  * * MC_TARGET_PAGE - If the page corresponding to this pte is a target for
- *   move charge. If @target is not NULL, the page is stored in target->page
+ *   move charge. If @target is not NULL, the folio is stored in target->folio
  *   with extra refcnt taken (Caller should release it).
  * * MC_TARGET_SWAP - If the swap entry corresponding to this pte is a
  *   target for charge migration.  If @target is not NULL, the entry is
@@ -6160,7 +6160,7 @@ static enum mc_target_type get_mctgt_type(struct vm_area_struct *vma,
                            is_device_coherent_page(page))
                                ret = MC_TARGET_DEVICE;
                        if (target)
-                               target->page = page;
+                               target->folio = page_folio(page);
                }
                if (!ret || !target) {
                        if (target)
@@ -6210,7 +6210,7 @@ static enum mc_target_type get_mctgt_type_thp(struct vm_area_struct *vma,
                                put_page(page);
                                return MC_TARGET_NONE;
                        }
-                       target->page = page;
+                       target->folio = page_folio(page);
                }
        }
        return ret;
@@ -6440,7 +6440,7 @@ static int mem_cgroup_move_charge_pte_range(pmd_t *pmd,
                }
                target_type = get_mctgt_type_thp(vma, addr, *pmd, &target);
                if (target_type == MC_TARGET_PAGE) {
-                       folio = page_folio(target.page);
+                       folio = target.folio;
                        if (folio_isolate_lru(folio)) {
                                if (!mem_cgroup_move_account(folio, true,
                                                             mc.from, mc.to)) {
@@ -6452,7 +6452,7 @@ static int mem_cgroup_move_charge_pte_range(pmd_t *pmd,
                        folio_unlock(folio);
                        folio_put(folio);
                } else if (target_type == MC_TARGET_DEVICE) {
-                       folio = page_folio(target.page);
+                       folio = target.folio;
                        if (!mem_cgroup_move_account(folio, true,
                                                     mc.from, mc.to)) {
                                mc.precharge -= HPAGE_PMD_NR;
@@ -6482,7 +6482,7 @@ retry:
                        device = true;
                        fallthrough;
                case MC_TARGET_PAGE:
-                       folio = page_folio(target.page);
+                       folio = target.folio;
                        /*
                         * We can have a part of the split pmd here. Moving it
                         * can be done but it would be too convoluted so simply