aboutsummaryrefslogtreecommitdiffstats
path: root/fs/dax.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/dax.c')
-rw-r--r--fs/dax.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/fs/dax.c b/fs/dax.c
index f3a44a7c14b3..3652b26a0048 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -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);
632unlock_pmd: 638unlock_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);
647unlock_pte: 652unlock_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,