diff options
Diffstat (limited to 'fs/dax.c')
-rw-r--r-- | fs/dax.c | 13 |
1 files changed, 9 insertions, 4 deletions
@@ -565,7 +565,7 @@ static void *dax_insert_mapping_entry(struct address_space *mapping, | |||
565 | ret = __radix_tree_lookup(page_tree, index, &node, &slot); | 565 | ret = __radix_tree_lookup(page_tree, index, &node, &slot); |
566 | WARN_ON_ONCE(ret != entry); | 566 | WARN_ON_ONCE(ret != entry); |
567 | __radix_tree_replace(page_tree, node, slot, | 567 | __radix_tree_replace(page_tree, node, slot, |
568 | new_entry, NULL, NULL); | 568 | new_entry, NULL); |
569 | entry = new_entry; | 569 | entry = new_entry; |
570 | } | 570 | } |
571 | 571 | ||
@@ -614,6 +614,13 @@ static void dax_mapping_entry_mkclean(struct address_space *mapping, | |||
614 | if (follow_pte_pmd(vma->vm_mm, address, &start, &end, &ptep, &pmdp, &ptl)) | 614 | if (follow_pte_pmd(vma->vm_mm, address, &start, &end, &ptep, &pmdp, &ptl)) |
615 | continue; | 615 | continue; |
616 | 616 | ||
617 | /* | ||
618 | * No need to call mmu_notifier_invalidate_range() as we are | ||
619 | * downgrading page table protection not changing it to point | ||
620 | * to a new page. | ||
621 | * | ||
622 | * See Documentation/vm/mmu_notifier.txt | ||
623 | */ | ||
617 | if (pmdp) { | 624 | if (pmdp) { |
618 | #ifdef CONFIG_FS_DAX_PMD | 625 | #ifdef CONFIG_FS_DAX_PMD |
619 | pmd_t pmd; | 626 | pmd_t pmd; |
@@ -628,7 +635,6 @@ static void dax_mapping_entry_mkclean(struct address_space *mapping, | |||
628 | pmd = pmd_wrprotect(pmd); | 635 | pmd = pmd_wrprotect(pmd); |
629 | pmd = pmd_mkclean(pmd); | 636 | pmd = pmd_mkclean(pmd); |
630 | set_pmd_at(vma->vm_mm, address, pmdp, pmd); | 637 | set_pmd_at(vma->vm_mm, address, pmdp, pmd); |
631 | mmu_notifier_invalidate_range(vma->vm_mm, start, end); | ||
632 | unlock_pmd: | 638 | unlock_pmd: |
633 | spin_unlock(ptl); | 639 | spin_unlock(ptl); |
634 | #endif | 640 | #endif |
@@ -643,7 +649,6 @@ unlock_pmd: | |||
643 | pte = pte_wrprotect(pte); | 649 | pte = pte_wrprotect(pte); |
644 | pte = pte_mkclean(pte); | 650 | pte = pte_mkclean(pte); |
645 | set_pte_at(vma->vm_mm, address, ptep, pte); | 651 | set_pte_at(vma->vm_mm, address, ptep, pte); |
646 | mmu_notifier_invalidate_range(vma->vm_mm, start, end); | ||
647 | unlock_pte: | 652 | unlock_pte: |
648 | pte_unmap_unlock(ptep, ptl); | 653 | pte_unmap_unlock(ptep, ptl); |
649 | } | 654 | } |
@@ -789,7 +794,7 @@ int dax_writeback_mapping_range(struct address_space *mapping, | |||
789 | 794 | ||
790 | tag_pages_for_writeback(mapping, start_index, end_index); | 795 | tag_pages_for_writeback(mapping, start_index, end_index); |
791 | 796 | ||
792 | pagevec_init(&pvec, 0); | 797 | pagevec_init(&pvec); |
793 | while (!done) { | 798 | while (!done) { |
794 | pvec.nr = find_get_entries_tag(mapping, start_index, | 799 | pvec.nr = find_get_entries_tag(mapping, start_index, |
795 | PAGECACHE_TAG_TOWRITE, PAGEVEC_SIZE, | 800 | PAGECACHE_TAG_TOWRITE, PAGEVEC_SIZE, |