diff options
Diffstat (limited to 'mm/mmap.c')
-rw-r--r-- | mm/mmap.c | 18 |
1 files changed, 11 insertions, 7 deletions
@@ -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) |