Now when everything is prepared, add support in ext4 to accept MAP_SYNC as an mmap(2) flag. Signed-off-by: Jan Kara <jack@xxxxxxx> --- fs/ext4/file.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 61a8788168f3..f013cda84b3d 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c @@ -364,6 +364,25 @@ static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma) return 0; } +#define EXT4_SUPPORTED_MAP_FLAGS (LEGACY_MAP_MASK | MAP_SYNC) + +static int ext4_file_mmap_validate(struct file *file, + struct vm_area_struct *vma, + unsigned long map_flags) +{ + if (map_flags & ~EXT4_SUPPORTED_MAP_FLAGS) + return -EOPNOTSUPP; + + /* + * We don't support synchronous mappings for non-DAX files. At least + * until someone comes with a sensible use case. + */ + if (!IS_DAX(file_inode(file)) && (map_flags & MAP_SYNC)) + return -EOPNOTSUPP; + + return ext4_file_mmap(file, vma); +} + static int ext4_file_open(struct inode * inode, struct file * filp) { struct super_block *sb = inode->i_sb; @@ -723,6 +742,7 @@ const struct file_operations ext4_file_operations = { .compat_ioctl = ext4_compat_ioctl, #endif .mmap = ext4_file_mmap, + .mmap_validate = ext4_file_mmap_validate, .open = ext4_file_open, .release = ext4_release_file, .fsync = ext4_sync_file, -- 2.12.3