On Wed, Oct 11, 2017 at 1:06 PM, Jan Kara <jack@xxxxxxx> wrote: > Now when everything is prepared, add support in xfs to accept MAP_SYNC > as an mmap(2) flag. > > Signed-off-by: Jan Kara <jack@xxxxxxx> > --- > fs/ext4/file.c | 1 + > fs/xfs/xfs_file.c | 23 +++++++++++++++++++++++ > 2 files changed, 24 insertions(+) > > diff --git a/fs/ext4/file.c b/fs/ext4/file.c > index f013cda84b3d..6b597cc6b29d 100644 > --- a/fs/ext4/file.c > +++ b/fs/ext4/file.c > @@ -26,6 +26,7 @@ > #include <linux/quotaops.h> > #include <linux/pagevec.h> > #include <linux/uio.h> > +#include <linux/mman.h> > #include "ext4.h" > #include "ext4_jbd2.h" > #include "xattr.h" > diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c > index c45f24ffab22..fb135224476d 100644 > --- a/fs/xfs/xfs_file.c > +++ b/fs/xfs/xfs_file.c > @@ -44,6 +44,7 @@ > #include <linux/falloc.h> > #include <linux/pagevec.h> > #include <linux/backing-dev.h> > +#include <linux/mman.h> > > static const struct vm_operations_struct xfs_file_vm_ops; > > @@ -1142,6 +1143,27 @@ xfs_file_mmap( > return 0; > } > > +#define XFS_MAP_SUPPORTED (LEGACY_MAP_MASK | MAP_SYNC) > + > +static int > +xfs_file_mmap_validate( > + struct file *filp, > + struct vm_area_struct *vma, > + unsigned long map_flags) > +{ > + if (map_flags & ~XFS_MAP_SUPPORTED) > + 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(filp)) && (map_flags & MAP_SYNC)) > + return -EOPNOTSUPP; Same comment about using EPERM here. That's also what I'm returning in the MAP_DIRECT case when the inode is a reflink inode and does not support MAP_DIRECT.