Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ext4: disable map_sync for async flush

Dont support 'MAP_SYNC' with non-DAX files and DAX files
with asynchronous dax_device. Virtio pmem provides
asynchronous host page cache flush mechanism. We don't
support 'MAP_SYNC' with virtio pmem and ext4.

Signed-off-by: Pankaj Gupta <pagupta@redhat.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>

authored by

Pankaj Gupta and committed by
Dan Williams
e46bfc3f 32de1484

+6 -4
+6 -4
fs/ext4/file.c
··· 367 367 static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma) 368 368 { 369 369 struct inode *inode = file->f_mapping->host; 370 + struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb); 371 + struct dax_device *dax_dev = sbi->s_daxdev; 370 372 371 - if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) 373 + if (unlikely(ext4_forced_shutdown(sbi))) 372 374 return -EIO; 373 375 374 376 /* 375 - * We don't support synchronous mappings for non-DAX files. At least 376 - * until someone comes with a sensible use case. 377 + * We don't support synchronous mappings for non-DAX files and 378 + * for DAX files if underneath dax_device is not synchronous. 377 379 */ 378 - if (!IS_DAX(file_inode(file)) && (vma->vm_flags & VM_SYNC)) 380 + if (!daxdev_mapping_supported(vma, dax_dev)) 379 381 return -EOPNOTSUPP; 380 382 381 383 file_accessed(file);