mm/migrate: remove useless mask of start address
[linux-2.6-microblaze.git] / mm / migrate.c
index 86873b6..0c98c9f 100644 (file)
@@ -1627,8 +1627,19 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes,
                        start = i;
                } else if (node != current_node) {
                        err = do_move_pages_to_node(mm, &pagelist, current_node);
-                       if (err)
+                       if (err) {
+                               /*
+                                * Positive err means the number of failed
+                                * pages to migrate.  Since we are going to
+                                * abort and return the number of non-migrated
+                                * pages, so need to incude the rest of the
+                                * nr_pages that have not been attempted as
+                                * well.
+                                */
+                               if (err > 0)
+                                       err += nr_pages - i - 1;
                                goto out;
+                       }
                        err = store_status(status, start, current_node, i - start);
                        if (err)
                                goto out;
@@ -1659,8 +1670,11 @@ static int do_pages_move(struct mm_struct *mm, nodemask_t task_nodes,
                        goto out_flush;
 
                err = do_move_pages_to_node(mm, &pagelist, current_node);
-               if (err)
+               if (err) {
+                       if (err > 0)
+                               err += nr_pages - i - 1;
                        goto out;
+               }
                if (i > start) {
                        err = store_status(status, start, current_node, i - start);
                        if (err)
@@ -1674,9 +1688,16 @@ out_flush:
 
        /* Make sure we do not overwrite the existing error */
        err1 = do_move_pages_to_node(mm, &pagelist, current_node);
+       /*
+        * Don't have to report non-attempted pages here since:
+        *     - If the above loop is done gracefully all pages have been
+        *       attempted.
+        *     - If the above loop is aborted it means a fatal error
+        *       happened, should return ret.
+        */
        if (!err1)
                err1 = store_status(status, start, current_node, i - start);
-       if (!err)
+       if (err >= 0)
                err = err1;
 out:
        return err;
@@ -2135,7 +2156,7 @@ static int migrate_vma_collect_hole(unsigned long start,
        struct migrate_vma *migrate = walk->private;
        unsigned long addr;
 
-       for (addr = start & PAGE_MASK; addr < end; addr += PAGE_SIZE) {
+       for (addr = start; addr < end; addr += PAGE_SIZE) {
                migrate->src[migrate->npages] = MIGRATE_PFN_MIGRATE;
                migrate->dst[migrate->npages] = 0;
                migrate->npages++;
@@ -2152,7 +2173,7 @@ static int migrate_vma_collect_skip(unsigned long start,
        struct migrate_vma *migrate = walk->private;
        unsigned long addr;
 
-       for (addr = start & PAGE_MASK; addr < end; addr += PAGE_SIZE) {
+       for (addr = start; addr < end; addr += PAGE_SIZE) {
                migrate->dst[migrate->npages] = 0;
                migrate->src[migrate->npages++] = 0;
        }