diff options
Diffstat (limited to 'mm/hugetlb.c')
-rw-r--r-- | mm/hugetlb.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 303fb0c02364..cc5be788a39f 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -2397,6 +2397,9 @@ retry_avoidcopy: | |||
2397 | ptep = huge_pte_offset(mm, address & huge_page_mask(h)); | 2397 | ptep = huge_pte_offset(mm, address & huge_page_mask(h)); |
2398 | if (likely(pte_same(huge_ptep_get(ptep), pte))) { | 2398 | if (likely(pte_same(huge_ptep_get(ptep), pte))) { |
2399 | /* Break COW */ | 2399 | /* Break COW */ |
2400 | mmu_notifier_invalidate_range_start(mm, | ||
2401 | address & huge_page_mask(h), | ||
2402 | (address & huge_page_mask(h)) + huge_page_size(h)); | ||
2400 | huge_ptep_clear_flush(vma, address, ptep); | 2403 | huge_ptep_clear_flush(vma, address, ptep); |
2401 | set_huge_pte_at(mm, address, ptep, | 2404 | set_huge_pte_at(mm, address, ptep, |
2402 | make_huge_pte(vma, new_page, 1)); | 2405 | make_huge_pte(vma, new_page, 1)); |
@@ -2404,6 +2407,9 @@ retry_avoidcopy: | |||
2404 | hugepage_add_anon_rmap(new_page, vma, address); | 2407 | hugepage_add_anon_rmap(new_page, vma, address); |
2405 | /* Make the old page be freed below */ | 2408 | /* Make the old page be freed below */ |
2406 | new_page = old_page; | 2409 | new_page = old_page; |
2410 | mmu_notifier_invalidate_range_end(mm, | ||
2411 | address & huge_page_mask(h), | ||
2412 | (address & huge_page_mask(h)) + huge_page_size(h)); | ||
2407 | } | 2413 | } |
2408 | page_cache_release(new_page); | 2414 | page_cache_release(new_page); |
2409 | page_cache_release(old_page); | 2415 | page_cache_release(old_page); |