@@ -1191,6 +1191,8 @@ int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
struct vm_area_struct *vma);
void unmap_mapping_range(struct address_space *mapping,
loff_t const holebegin, loff_t const holelen, int even_cows);
+int follow_pte(struct mm_struct *mm, unsigned long address, pte_t **ptepp,
+ spinlock_t **ptlp);
int follow_pfn(struct vm_area_struct *vma, unsigned long address,
unsigned long *pfn);
int follow_phys(struct vm_area_struct *vma, unsigned long address,
@@ -3635,8 +3635,8 @@ out:
return -EINVAL;
}
-static inline int follow_pte(struct mm_struct *mm, unsigned long address,
- pte_t **ptepp, spinlock_t **ptlp)
+int follow_pte(struct mm_struct *mm, unsigned long address, pte_t **ptepp,
+ spinlock_t **ptlp)
{
int res;
@@ -3645,6 +3645,7 @@ static inline int follow_pte(struct mm_struct *mm, unsigned long address,
!(res = __follow_pte(mm, address, ptepp, ptlp)));
return res;
}
+EXPORT_SYMBOL(follow_pte);
/**
* follow_pfn - look up PFN at a user virtual address
DAX will need to implement its own version of page_check_address(). To avoid duplicating page table walking code, export follow_pte() which does what we need. Signed-off-by: Jan Kara <jack@suse.cz> --- include/linux/mm.h | 2 ++ mm/memory.c | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-)