Merge tag 'char-misc-5.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[linux-2.6-microblaze.git] / mm / page_isolation.c
index 2c11a38..242c031 100644 (file)
@@ -151,6 +151,7 @@ __first_valid_page(unsigned long pfn, unsigned long nr_pages)
  *                     a bit mask)
  *                     MEMORY_OFFLINE - isolate to offline (!allocate) memory
  *                                      e.g., skip over PageHWPoison() pages
+ *                                      and PageOffline() pages.
  *                     REPORT_FAILURE - report details about the failure to
  *                     isolate the range
  *
@@ -259,6 +260,14 @@ __test_page_isolated_in_pageblock(unsigned long pfn, unsigned long end_pfn,
                else if ((flags & MEMORY_OFFLINE) && PageHWPoison(page))
                        /* A HWPoisoned page cannot be also PageBuddy */
                        pfn++;
+               else if ((flags & MEMORY_OFFLINE) && PageOffline(page) &&
+                        !page_count(page))
+                       /*
+                        * The responsible driver agreed to skip PageOffline()
+                        * pages when offlining memory by dropping its
+                        * reference in MEM_GOING_OFFLINE.
+                        */
+                       pfn++;
                else
                        break;
        }
@@ -297,8 +306,3 @@ int test_pages_isolated(unsigned long start_pfn, unsigned long end_pfn,
 
        return pfn < end_pfn ? -EBUSY : 0;
 }
-
-struct page *alloc_migrate_target(struct page *page, unsigned long private)
-{
-       return new_page_nodemask(page, numa_node_id(), &node_states[N_MEMORY]);
-}