diff options
Diffstat (limited to 'fs/ext4/file.c')
| -rw-r--r-- | fs/ext4/file.c | 10 | 
1 files changed, 6 insertions, 4 deletions
diff --git a/fs/ext4/file.c b/fs/ext4/file.c index f4a24a46245e..70b0438dbc94 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -371,15 +371,17 @@ static const struct vm_operations_struct ext4_file_vm_ops = {  static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma)  {  	struct inode *inode = file->f_mapping->host; +	struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); +	struct dax_device *dax_dev = sbi->s_daxdev; -	if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) +	if (unlikely(ext4_forced_shutdown(sbi)))  		return -EIO;  	/* -	 * We don't support synchronous mappings for non-DAX files. At least -	 * until someone comes with a sensible use case. +	 * We don't support synchronous mappings for non-DAX files and +	 * for DAX files if underneath dax_device is not synchronous.  	 */ -	if (!IS_DAX(file_inode(file)) && (vma->vm_flags & VM_SYNC)) +	if (!daxdev_mapping_supported(vma, dax_dev))  		return -EOPNOTSUPP;  	file_accessed(file);  | 
