unsigned int *ret_succeeded);
 struct folio *alloc_migration_target(struct folio *src, unsigned long private);
 bool isolate_movable_page(struct page *page, isolate_mode_t mode);
+bool isolate_folio_to_list(struct folio *folio, struct list_head *list);
 
 int migrate_huge_page_move_mapping(struct address_space *mapping,
                struct folio *dst, struct folio *src);
        { return NULL; }
 static inline bool isolate_movable_page(struct page *page, isolate_mode_t mode)
        { return false; }
+static inline bool isolate_folio_to_list(struct folio *folio, struct list_head *list)
+       { return false; }
 
 static inline int migrate_huge_page_move_mapping(struct address_space *mapping,
                                  struct folio *dst, struct folio *src)
 
 #undef pr_fmt
 #define pr_fmt(fmt) "Soft offline: " fmt
 
-static bool mf_isolate_folio(struct folio *folio, struct list_head *pagelist)
-{
-       bool isolated = false;
-
-       if (folio_test_hugetlb(folio)) {
-               isolated = isolate_hugetlb(folio, pagelist);
-       } else {
-               bool lru = !__folio_test_movable(folio);
-
-               if (lru)
-                       isolated = folio_isolate_lru(folio);
-               else
-                       isolated = isolate_movable_page(&folio->page,
-                                                       ISOLATE_UNEVICTABLE);
-
-               if (isolated) {
-                       list_add(&folio->lru, pagelist);
-                       if (lru)
-                               node_stat_add_folio(folio, NR_ISOLATED_ANON +
-                                                   folio_is_file_lru(folio));
-               }
-       }
-
-       /*
-        * If we succeed to isolate the folio, we grabbed another refcount on
-        * the folio, so we can safely drop the one we got from get_any_page().
-        * If we failed to isolate the folio, it means that we cannot go further
-        * and we will return an error, so drop the reference we got from
-        * get_any_page() as well.
-        */
-       folio_put(folio);
-       return isolated;
-}
-
 /*
  * soft_offline_in_use_page handles hugetlb-pages and non-hugetlb pages.
  * If the page is a non-dirty unmapped page-cache page, it simply invalidates.
        struct folio *folio = page_folio(page);
        char const *msg_page[] = {"page", "hugepage"};
        bool huge = folio_test_hugetlb(folio);
+       bool isolated;
        LIST_HEAD(pagelist);
        struct migration_target_control mtc = {
                .nid = NUMA_NO_NODE,
                return 0;
        }
 
-       if (mf_isolate_folio(folio, &pagelist)) {
+       isolated = isolate_folio_to_list(folio, &pagelist);
+
+       /*
+        * If we succeed to isolate the folio, we grabbed another refcount on
+        * the folio, so we can safely drop the one we got from get_any_page().
+        * If we failed to isolate the folio, it means that we cannot go further
+        * and we will return an error, so drop the reference we got from
+        * get_any_page() as well.
+        */
+       folio_put(folio);
+
+       if (isolated) {
                ret = migrate_pages(&pagelist, alloc_migration_target, NULL,
                        (unsigned long)&mtc, MIGRATE_SYNC, MR_MEMORY_FAILURE, NULL);
                if (!ret) {
 
        }
 }
 
+/* Must be called with an elevated refcount on the non-hugetlb folio */
+bool isolate_folio_to_list(struct folio *folio, struct list_head *list)
+{
+       bool isolated, lru;
+
+       if (folio_test_hugetlb(folio))
+               return isolate_hugetlb(folio, list);
+
+       lru = !__folio_test_movable(folio);
+       if (lru)
+               isolated = folio_isolate_lru(folio);
+       else
+               isolated = isolate_movable_page(&folio->page,
+                                               ISOLATE_UNEVICTABLE);
+
+       if (!isolated)
+               return false;
+
+       list_add(&folio->lru, list);
+       if (lru)
+               node_stat_add_folio(folio, NR_ISOLATED_ANON +
+                                   folio_is_file_lru(folio));
+
+       return true;
+}
+
 /*
  * Restore a potential migration pte to a working pte entry
  */