int mem_cgroup_swapin_charge_folio(struct folio *folio, struct mm_struct *mm,
                                  gfp_t gfp, swp_entry_t entry);
 
-void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry, unsigned int nr_pages);
-
 void __mem_cgroup_uncharge(struct folio *folio);
 
 /**
        return 0;
 }
 
-static inline void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry, unsigned int nr)
-{
-}
-
 static inline void mem_cgroup_uncharge(struct folio *folio)
 {
 }
        current->in_user_fault = 0;
 }
 
+void memcg1_swapout(struct folio *folio, swp_entry_t entry);
+void memcg1_swapin(swp_entry_t entry, unsigned int nr_pages);
+
 #else /* CONFIG_MEMCG_V1 */
 static inline
 unsigned long memcg1_soft_limit_reclaim(pg_data_t *pgdat, int order,
 {
 }
 
+static inline void memcg1_swapout(struct folio *folio, swp_entry_t entry)
+{
+}
+
+static inline void memcg1_swapin(swp_entry_t entry, unsigned int nr_pages)
+{
+}
+
 #endif /* CONFIG_MEMCG_V1 */
 
 #endif /* _LINUX_MEMCONTROL_H */
 
 #endif
 
 #if defined(CONFIG_MEMCG) && defined(CONFIG_SWAP)
-void mem_cgroup_swapout(struct folio *folio, swp_entry_t entry);
 int __mem_cgroup_try_charge_swap(struct folio *folio, swp_entry_t entry);
 static inline int mem_cgroup_try_charge_swap(struct folio *folio,
                swp_entry_t entry)
 extern long mem_cgroup_get_nr_swap_pages(struct mem_cgroup *memcg);
 extern bool mem_cgroup_swap_full(struct folio *folio);
 #else
-static inline void mem_cgroup_swapout(struct folio *folio, swp_entry_t entry)
-{
-}
-
 static inline int mem_cgroup_try_charge_swap(struct folio *folio,
                                             swp_entry_t entry)
 {
 
 
        /*
         * Exclude swapcache: originally to avoid a corrupt deferred split
-        * queue. Nowadays that is fully prevented by mem_cgroup_swapout();
+        * queue. Nowadays that is fully prevented by memcg1_swapout();
         * but if page reclaim is already handling the same folio, it is
         * unnecessary to handle it again in the shrinker, so excluding
         * swapcache here may still be a useful optimization.
 
        local_irq_restore(flags);
 }
 
-void memcg1_swapout(struct folio *folio, struct mem_cgroup *memcg)
+/**
+ * memcg1_swapout - transfer a memsw charge to swap
+ * @folio: folio whose memsw charge to transfer
+ * @entry: swap entry to move the charge to
+ *
+ * Transfer the memsw charge of @folio to @entry.
+ */
+void memcg1_swapout(struct folio *folio, swp_entry_t entry)
 {
+       struct mem_cgroup *memcg, *swap_memcg;
+       unsigned int nr_entries;
+
+       VM_BUG_ON_FOLIO(folio_test_lru(folio), folio);
+       VM_BUG_ON_FOLIO(folio_ref_count(folio), folio);
+
+       if (mem_cgroup_disabled())
+               return;
+
+       if (!do_memsw_account())
+               return;
+
+       memcg = folio_memcg(folio);
+
+       VM_WARN_ON_ONCE_FOLIO(!memcg, folio);
+       if (!memcg)
+               return;
+
+       /*
+        * In case the memcg owning these pages has been offlined and doesn't
+        * have an ID allocated to it anymore, charge the closest online
+        * ancestor for the swap instead and transfer the memory+swap charge.
+        */
+       swap_memcg = mem_cgroup_id_get_online(memcg);
+       nr_entries = folio_nr_pages(folio);
+       /* Get references for the tail pages, too */
+       if (nr_entries > 1)
+               mem_cgroup_id_get_many(swap_memcg, nr_entries - 1);
+       mod_memcg_state(swap_memcg, MEMCG_SWAP, nr_entries);
+
+       swap_cgroup_record(folio, mem_cgroup_id(memcg), entry);
+
+       folio_unqueue_deferred_split(folio);
+       folio->memcg_data = 0;
+
+       if (!mem_cgroup_is_root(memcg))
+               page_counter_uncharge(&memcg->memory, nr_entries);
+
+       if (memcg != swap_memcg) {
+               if (!mem_cgroup_is_root(swap_memcg))
+                       page_counter_charge(&swap_memcg->memsw, nr_entries);
+               page_counter_uncharge(&memcg->memsw, nr_entries);
+       }
+
        /*
         * Interrupts should be disabled here because the caller holds the
         * i_pages lock which is taken with interrupts-off. It is
        memcg1_charge_statistics(memcg, -folio_nr_pages(folio));
        preempt_enable_nested();
        memcg1_check_events(memcg, folio_nid(folio));
+
+       css_put(&memcg->css);
+}
+
+/*
+ * memcg1_swapin - uncharge swap slot
+ * @entry: the first swap entry for which the pages are charged
+ * @nr_pages: number of pages which will be uncharged
+ *
+ * Call this function after successfully adding the charged page to swapcache.
+ *
+ * Note: This function assumes the page for which swap slot is being uncharged
+ * is order 0 page.
+ */
+void memcg1_swapin(swp_entry_t entry, unsigned int nr_pages)
+{
+       /*
+        * Cgroup1's unified memory+swap counter has been charged with the
+        * new swapcache page, finish the transfer by uncharging the swap
+        * slot. The swap slot would also get uncharged when it dies, but
+        * it can stick around indefinitely and we'd count the page twice
+        * the entire time.
+        *
+        * Cgroup2 has separate resource counters for memory and swap,
+        * so this is a non-issue here. Memory and swap charge lifetimes
+        * correspond 1:1 to page and swap slot lifetimes: we charge the
+        * page to memory here, and uncharge swap when the slot is freed.
+        */
+       if (do_memsw_account()) {
+               /*
+                * The swap entry might not get freed for a long time,
+                * let's not wait for it.  The page already received a
+                * memory+swap charge, drop the swap entry duplicate.
+                */
+               mem_cgroup_uncharge_swap(entry, nr_pages);
+       }
 }
 
 void memcg1_uncharge_batch(struct mem_cgroup *memcg, unsigned long pgpgout,
 
 unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item);
 int memory_stat_show(struct seq_file *m, void *v);
 
+void mem_cgroup_id_get_many(struct mem_cgroup *memcg, unsigned int n);
+struct mem_cgroup *mem_cgroup_id_get_online(struct mem_cgroup *memcg);
+
 /* Cgroup v1-specific declarations */
 #ifdef CONFIG_MEMCG_V1
 
 void memcg1_oom_recover(struct mem_cgroup *memcg);
 
 void memcg1_commit_charge(struct folio *folio, struct mem_cgroup *memcg);
-void memcg1_swapout(struct folio *folio, struct mem_cgroup *memcg);
 void memcg1_uncharge_batch(struct mem_cgroup *memcg, unsigned long pgpgout,
                           unsigned long nr_memory, int nid);
 
 static inline void memcg1_commit_charge(struct folio *folio,
                                        struct mem_cgroup *memcg) {}
 
-static inline void memcg1_swapout(struct folio *folio, struct mem_cgroup *memcg) {}
-
 static inline void memcg1_uncharge_batch(struct mem_cgroup *memcg,
                                         unsigned long pgpgout,
                                         unsigned long nr_memory, int nid) {}
 
        }
 }
 
-static void __maybe_unused mem_cgroup_id_get_many(struct mem_cgroup *memcg,
+void __maybe_unused mem_cgroup_id_get_many(struct mem_cgroup *memcg,
                                           unsigned int n)
 {
        refcount_add(n, &memcg->id.ref);
        mem_cgroup_id_put_many(memcg, 1);
 }
 
+struct mem_cgroup *mem_cgroup_id_get_online(struct mem_cgroup *memcg)
+{
+       while (!refcount_inc_not_zero(&memcg->id.ref)) {
+               /*
+                * The root cgroup cannot be destroyed, so it's refcount must
+                * always be >= 1.
+                */
+               if (WARN_ON_ONCE(mem_cgroup_is_root(memcg))) {
+                       VM_BUG_ON(1);
+                       break;
+               }
+               memcg = parent_mem_cgroup(memcg);
+               if (!memcg)
+                       memcg = root_mem_cgroup;
+       }
+       return memcg;
+}
+
 /**
  * mem_cgroup_from_id - look up a memcg from a memcg id
  * @id: the memcg id to look up
        return ret;
 }
 
-/*
- * mem_cgroup_swapin_uncharge_swap - uncharge swap slot
- * @entry: the first swap entry for which the pages are charged
- * @nr_pages: number of pages which will be uncharged
- *
- * Call this function after successfully adding the charged page to swapcache.
- *
- * Note: This function assumes the page for which swap slot is being uncharged
- * is order 0 page.
- */
-void mem_cgroup_swapin_uncharge_swap(swp_entry_t entry, unsigned int nr_pages)
-{
-       /*
-        * Cgroup1's unified memory+swap counter has been charged with the
-        * new swapcache page, finish the transfer by uncharging the swap
-        * slot. The swap slot would also get uncharged when it dies, but
-        * it can stick around indefinitely and we'd count the page twice
-        * the entire time.
-        *
-        * Cgroup2 has separate resource counters for memory and swap,
-        * so this is a non-issue here. Memory and swap charge lifetimes
-        * correspond 1:1 to page and swap slot lifetimes: we charge the
-        * page to memory here, and uncharge swap when the slot is freed.
-        */
-       if (do_memsw_account()) {
-               /*
-                * The swap entry might not get freed for a long time,
-                * let's not wait for it.  The page already received a
-                * memory+swap charge, drop the swap entry duplicate.
-                */
-               mem_cgroup_uncharge_swap(entry, nr_pages);
-       }
-}
-
 struct uncharge_gather {
        struct mem_cgroup *memcg;
        unsigned long nr_memory;
 subsys_initcall(mem_cgroup_init);
 
 #ifdef CONFIG_SWAP
-static struct mem_cgroup *mem_cgroup_id_get_online(struct mem_cgroup *memcg)
-{
-       while (!refcount_inc_not_zero(&memcg->id.ref)) {
-               /*
-                * The root cgroup cannot be destroyed, so it's refcount must
-                * always be >= 1.
-                */
-               if (WARN_ON_ONCE(mem_cgroup_is_root(memcg))) {
-                       VM_BUG_ON(1);
-                       break;
-               }
-               memcg = parent_mem_cgroup(memcg);
-               if (!memcg)
-                       memcg = root_mem_cgroup;
-       }
-       return memcg;
-}
-
-/**
- * mem_cgroup_swapout - transfer a memsw charge to swap
- * @folio: folio whose memsw charge to transfer
- * @entry: swap entry to move the charge to
- *
- * Transfer the memsw charge of @folio to @entry.
- */
-void mem_cgroup_swapout(struct folio *folio, swp_entry_t entry)
-{
-       struct mem_cgroup *memcg, *swap_memcg;
-       unsigned int nr_entries;
-
-       VM_BUG_ON_FOLIO(folio_test_lru(folio), folio);
-       VM_BUG_ON_FOLIO(folio_ref_count(folio), folio);
-
-       if (mem_cgroup_disabled())
-               return;
-
-       if (!do_memsw_account())
-               return;
-
-       memcg = folio_memcg(folio);
-
-       VM_WARN_ON_ONCE_FOLIO(!memcg, folio);
-       if (!memcg)
-               return;
-
-       /*
-        * In case the memcg owning these pages has been offlined and doesn't
-        * have an ID allocated to it anymore, charge the closest online
-        * ancestor for the swap instead and transfer the memory+swap charge.
-        */
-       swap_memcg = mem_cgroup_id_get_online(memcg);
-       nr_entries = folio_nr_pages(folio);
-       /* Get references for the tail pages, too */
-       if (nr_entries > 1)
-               mem_cgroup_id_get_many(swap_memcg, nr_entries - 1);
-       mod_memcg_state(swap_memcg, MEMCG_SWAP, nr_entries);
-
-       swap_cgroup_record(folio, mem_cgroup_id(swap_memcg), entry);
-
-       folio_unqueue_deferred_split(folio);
-       folio->memcg_data = 0;
-
-       if (!mem_cgroup_is_root(memcg))
-               page_counter_uncharge(&memcg->memory, nr_entries);
-
-       if (memcg != swap_memcg) {
-               if (!mem_cgroup_is_root(swap_memcg))
-                       page_counter_charge(&swap_memcg->memsw, nr_entries);
-               page_counter_uncharge(&memcg->memsw, nr_entries);
-       }
-
-       memcg1_swapout(folio, memcg);
-       css_put(&memcg->css);
-}
-
 /**
  * __mem_cgroup_try_charge_swap - try charging swap space for a folio
  * @folio: folio being added to swap
 
                                }
                                need_clear_cache = true;
 
-                               mem_cgroup_swapin_uncharge_swap(entry, nr_pages);
+                               memcg1_swapin(entry, nr_pages);
 
                                shadow = get_shadow_from_swap_cache(entry);
                                if (shadow)
 
        __folio_set_swapbacked(new);
        new->swap = entry;
 
-       mem_cgroup_swapin_uncharge_swap(entry, nr_pages);
+       memcg1_swapin(entry, nr_pages);
        shadow = get_shadow_from_swap_cache(entry);
        if (shadow)
                workingset_refault(new, shadow);
 
        if (add_to_swap_cache(new_folio, entry, gfp_mask & GFP_RECLAIM_MASK, &shadow))
                goto fail_unlock;
 
-       mem_cgroup_swapin_uncharge_swap(entry, 1);
+       memcg1_swapin(entry, 1);
 
        if (shadow)
                workingset_refault(new_folio, shadow);
 
                if (reclaimed && !mapping_exiting(mapping))
                        shadow = workingset_eviction(folio, target_memcg);
                __delete_from_swap_cache(folio, swap, shadow);
-               mem_cgroup_swapout(folio, swap);
+               memcg1_swapout(folio, swap);
                xa_unlock_irq(&mapping->i_pages);
                put_swap_folio(folio, swap);
        } else {