mm: hugetlb: Copy general hugetlb code from x86 to mm.
[firefly-linux-kernel-4.4.55.git] / mm / mempolicy.c
index 74310017296ee02317b79a2c28b25ef303fc7720..6c2dace665aa4e4dad33bccecb6a247bb8ed03b6 100644 (file)
@@ -732,7 +732,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
                if (prev) {
                        vma = prev;
                        next = vma->vm_next;
-                       continue;
+                       if (mpol_equal(vma_policy(vma), new_pol))
+                               continue;
+                       /* vma_merge() joined vma && vma->next, case 8 */
+                       goto replace;
                }
                if (vma->vm_start != vmstart) {
                        err = split_vma(vma->vm_mm, vma, vmstart, 1);
@@ -744,6 +747,7 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
                        if (err)
                                goto out;
                }
+ replace:
                err = vma_replace_policy(vma, new_pol);
                if (err)
                        goto out;
@@ -2797,7 +2801,7 @@ int mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol)
         */
        VM_BUG_ON(maxlen < strlen("interleave") + strlen("relative") + 16);
 
-       if (!pol || pol == &default_policy)
+       if (!pol || pol == &default_policy || (pol->flags & MPOL_F_MORON))
                mode = MPOL_DEFAULT;
        else
                mode = pol->mode;