diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2021-02-05 05:07:11 -0500 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2021-02-09 07:05:44 -0500 |
commit | 9fd6dad1261a541b3f5fa7dc5b152222306e6702 (patch) | |
tree | 07a393402e4e9d938a094731c816ca3b54da8711 /fs/dax.c | |
parent | 897218ff7cf19290ec2d69652ce673d8ed6fedeb (diff) | |
download | linux-9fd6dad1261a541b3f5fa7dc5b152222306e6702.tar.gz linux-9fd6dad1261a541b3f5fa7dc5b152222306e6702.tar.bz2 linux-9fd6dad1261a541b3f5fa7dc5b152222306e6702.zip |
mm: provide a saner PTE walking API for modules
Currently, the follow_pfn function is exported for modules but
follow_pte is not. However, follow_pfn is very easy to misuse,
because it does not provide protections (so most of its callers
assume the page is writable!) and because it returns after having
already unlocked the page table lock.
Provide instead a simplified version of follow_pte that does
not have the pmdpp and range arguments. The older version
survives as follow_invalidate_pte() for use by fs/dax.c.
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'fs/dax.c')
-rw-r--r-- | fs/dax.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -810,11 +810,12 @@ static void dax_entry_mkclean(struct address_space *mapping, pgoff_t index, address = pgoff_address(index, vma); /* - * Note because we provide range to follow_pte it will call + * follow_invalidate_pte() will use the range to call * mmu_notifier_invalidate_range_start() on our behalf before * taking any lock. */ - if (follow_pte(vma->vm_mm, address, &range, &ptep, &pmdp, &ptl)) + if (follow_invalidate_pte(vma->vm_mm, address, &range, &ptep, + &pmdp, &ptl)) continue; /* |