Re: [PATCH 19/19] xfs: Add support for MAP_SYNC flag
From: Dan Williams <hidden>
Date: 2017-10-11 22:54:52
Also in:
linux-fsdevel, linux-xfs
On Wed, Oct 11, 2017 at 1:06 PM, Jan Kara [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Now when everything is prepared, add support in xfs to accept MAP_SYNC as an mmap(2) flag. Signed-off-by: Jan Kara <jack@suse.cz> --- 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.