aboutsummaryrefslogtreecommitdiffstats
path: root/mm/mmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/mmap.c')
-rw-r--r--mm/mmap.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/mm/mmap.c b/mm/mmap.c
index 7f855206e7fb..ae919891a087 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -776,8 +776,11 @@ again: remove_next = 1 + (end > next->vm_end);
776 * shrinking vma had, to cover any anon pages imported. 776 * shrinking vma had, to cover any anon pages imported.
777 */ 777 */
778 if (exporter && exporter->anon_vma && !importer->anon_vma) { 778 if (exporter && exporter->anon_vma && !importer->anon_vma) {
779 if (anon_vma_clone(importer, exporter)) 779 int error;
780 return -ENOMEM; 780
781 error = anon_vma_clone(importer, exporter);
782 if (error)
783 return error;
781 importer->anon_vma = exporter->anon_vma; 784 importer->anon_vma = exporter->anon_vma;
782 } 785 }
783 } 786 }
@@ -1080,7 +1083,7 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
1080 end, prev->vm_pgoff, NULL); 1083 end, prev->vm_pgoff, NULL);
1081 if (err) 1084 if (err)
1082 return NULL; 1085 return NULL;
1083 khugepaged_enter_vma_merge(prev); 1086 khugepaged_enter_vma_merge(prev, vm_flags);
1084 return prev; 1087 return prev;
1085 } 1088 }
1086 1089
@@ -1099,7 +1102,7 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
1099 next->vm_pgoff - pglen, NULL); 1102 next->vm_pgoff - pglen, NULL);
1100 if (err) 1103 if (err)
1101 return NULL; 1104 return NULL;
1102 khugepaged_enter_vma_merge(area); 1105 khugepaged_enter_vma_merge(area, vm_flags);
1103 return area; 1106 return area;
1104 } 1107 }
1105 1108
@@ -2208,7 +2211,7 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
2208 } 2211 }
2209 } 2212 }
2210 vma_unlock_anon_vma(vma); 2213 vma_unlock_anon_vma(vma);
2211 khugepaged_enter_vma_merge(vma); 2214 khugepaged_enter_vma_merge(vma, vma->vm_flags);
2212 validate_mm(vma->vm_mm); 2215 validate_mm(vma->vm_mm);
2213 return error; 2216 return error;
2214} 2217}
@@ -2277,7 +2280,7 @@ int expand_downwards(struct vm_area_struct *vma,
2277 } 2280 }
2278 } 2281 }
2279 vma_unlock_anon_vma(vma); 2282 vma_unlock_anon_vma(vma);
2280 khugepaged_enter_vma_merge(vma); 2283 khugepaged_enter_vma_merge(vma, vma->vm_flags);
2281 validate_mm(vma->vm_mm); 2284 validate_mm(vma->vm_mm);
2282 return error; 2285 return error;
2283} 2286}
@@ -2469,7 +2472,8 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
2469 if (err) 2472 if (err)
2470 goto out_free_vma; 2473 goto out_free_vma;
2471 2474
2472 if (anon_vma_clone(new, vma)) 2475 err = anon_vma_clone(new, vma);
2476 if (err)
2473 goto out_free_mpol; 2477 goto out_free_mpol;
2474 2478
2475 if (new->vm_file) 2479 if (new->vm_file)