diff options
Diffstat (limited to 'mm/frame_vector.c')
| -rw-r--r-- | mm/frame_vector.c | 14 | 
1 files changed, 14 insertions, 0 deletions
diff --git a/mm/frame_vector.c b/mm/frame_vector.c index 2f98df0d460e..c64dca6e27c2 100644 --- a/mm/frame_vector.c +++ b/mm/frame_vector.c @@ -53,6 +53,20 @@ int get_vaddr_frames(unsigned long start, unsigned int nr_frames,  		ret = -EFAULT;  		goto out;  	} + +	/* +	 * While get_vaddr_frames() could be used for transient (kernel +	 * controlled lifetime) pinning of memory pages all current +	 * users establish long term (userspace controlled lifetime) +	 * page pinning. Treat get_vaddr_frames() like +	 * get_user_pages_longterm() and disallow it for filesystem-dax +	 * mappings. +	 */ +	if (vma_is_fsdax(vma)) { +		ret = -EOPNOTSUPP; +		goto out; +	} +  	if (!(vma->vm_flags & (VM_IO | VM_PFNMAP))) {  		vec->got_ref = true;  		vec->is_pfns = false;  |