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 54d42b009dbe..b61d2db9f34e 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -2349,11 +2349,17 @@ retry_avoidcopy: | |||
2349 | ptep = huge_pte_offset(mm, address & huge_page_mask(h)); | 2349 | ptep = huge_pte_offset(mm, address & huge_page_mask(h)); |
2350 | if (likely(pte_same(huge_ptep_get(ptep), pte))) { | 2350 | if (likely(pte_same(huge_ptep_get(ptep), pte))) { |
2351 | /* Break COW */ | 2351 | /* Break COW */ |
2352 | mmu_notifier_invalidate_range_start(mm, | ||
2353 | address & huge_page_mask(h), | ||
2354 | (address & huge_page_mask(h)) + huge_page_size(h)); | ||
2352 | huge_ptep_clear_flush(vma, address, ptep); | 2355 | huge_ptep_clear_flush(vma, address, ptep); |
2353 | set_huge_pte_at(mm, address, ptep, | 2356 | set_huge_pte_at(mm, address, ptep, |
2354 | make_huge_pte(vma, new_page, 1)); | 2357 | make_huge_pte(vma, new_page, 1)); |
2355 | /* Make the old page be freed below */ | 2358 | /* Make the old page be freed below */ |
2356 | new_page = old_page; | 2359 | new_page = old_page; |
2360 | mmu_notifier_invalidate_range_end(mm, | ||
2361 | address & huge_page_mask(h), | ||
2362 | (address & huge_page_mask(h)) + huge_page_size(h)); | ||
2357 | } | 2363 | } |
2358 | page_cache_release(new_page); | 2364 | page_cache_release(new_page); |
2359 | page_cache_release(old_page); | 2365 | page_cache_release(old_page); |