memory hotplug: fix comments when adding section
[sfrench/cifs-2.6.git] / mm / memory_hotplug.c
index d4b5f29906b96465207df76897739d2eba518886..c52aa05b106c76dd5b469bc66e0227348d7524e5 100644 (file)
@@ -265,7 +265,7 @@ static int __meminit __add_section(int nid, unsigned long phys_start_pfn,
        /*
         * Make all the pages reserved so that nobody will stumble over half
         * initialized state.
-        * FIXME: We also have to associate it with a node because pfn_to_node
+        * FIXME: We also have to associate it with a node because page_to_nid
         * relies on having page with the proper node.
         */
        for (i = 0; i < PAGES_PER_SECTION; i++) {
@@ -1590,11 +1590,11 @@ static void node_states_clear_node(int node, struct memory_notify *arg)
 }
 
 static int __ref __offline_pages(unsigned long start_pfn,
-                 unsigned long end_pfn, unsigned long timeout)
+                 unsigned long end_pfn)
 {
-       unsigned long pfn, nr_pages, expire;
+       unsigned long pfn, nr_pages;
        long offlined_pages;
-       int ret, drain, retry_max, node;
+       int ret, node;
        unsigned long flags;
        unsigned long valid_start, valid_end;
        struct zone *zone;
@@ -1630,44 +1630,22 @@ static int __ref __offline_pages(unsigned long start_pfn,
                goto failed_removal;
 
        pfn = start_pfn;
-       expire = jiffies + timeout;
-       drain = 0;
-       retry_max = 5;
 repeat:
        /* start memory hot removal */
-       ret = -EAGAIN;
-       if (time_after(jiffies, expire))
-               goto failed_removal;
        ret = -EINTR;
        if (signal_pending(current))
                goto failed_removal;
-       ret = 0;
-       if (drain) {
-               lru_add_drain_all_cpuslocked();
-               cond_resched();
-               drain_all_pages(zone);
-       }
+
+       cond_resched();
+       lru_add_drain_all_cpuslocked();
+       drain_all_pages(zone);
 
        pfn = scan_movable_pages(start_pfn, end_pfn);
        if (pfn) { /* We have movable pages */
                ret = do_migrate_range(pfn, end_pfn);
-               if (!ret) {
-                       drain = 1;
-                       goto repeat;
-               } else {
-                       if (ret < 0)
-                               if (--retry_max == 0)
-                                       goto failed_removal;
-                       yield();
-                       drain = 1;
-                       goto repeat;
-               }
+               goto repeat;
        }
-       /* drain all zone's lru pagevec, this is asynchronous... */
-       lru_add_drain_all_cpuslocked();
-       yield();
-       /* drain pcp pages, this is synchronous. */
-       drain_all_pages(zone);
+
        /*
         * dissolve free hugepages in the memory block before doing offlining
         * actually in order to make hugetlbfs's object counting consistent.
@@ -1677,10 +1655,8 @@ repeat:
                goto failed_removal;
        /* check again */
        offlined_pages = check_pages_isolated(start_pfn, end_pfn);
-       if (offlined_pages < 0) {
-               ret = -EBUSY;
-               goto failed_removal;
-       }
+       if (offlined_pages < 0)
+               goto repeat;
        pr_info("Offlined Pages %ld\n", offlined_pages);
        /* Ok, all of our target is isolated.
           We cannot do rollback at this point. */
@@ -1728,7 +1704,7 @@ failed_removal:
 /* Must be protected by mem_hotplug_begin() or a device_lock */
 int offline_pages(unsigned long start_pfn, unsigned long nr_pages)
 {
-       return __offline_pages(start_pfn, start_pfn + nr_pages, 120 * HZ);
+       return __offline_pages(start_pfn, start_pfn + nr_pages);
 }
 #endif /* CONFIG_MEMORY_HOTREMOVE */