On Thu, Oct 12, 2017 at 6:42 AM, Jan Kara <jack@xxxxxxx> wrote: > On Wed 11-10-17 15:11:21, Dan Williams wrote: >> On Wed, Oct 11, 2017 at 1:06 PM, Jan Kara <jack@xxxxxxx> wrote: >> > 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; >> >> Perhaps EPERM instead to differentiate the unsupported flags case? >> There's precedent for mmap returning EPERM for reasons other than >> incompatible PROT flags. > > Hum, I could make it EINVAL. EPERM looks just too bogus to me. EINVAL is indistinguishable from a kernel that does not support MAP_SHARED_VALIDATE...