From: Jan Kara Subject: [PATCH 19/19] xfs: Add support for MAP_SYNC flag Date: Wed, 11 Oct 2017 22:06:03 +0200 Message-ID: <20171011200603.27442-20-jack@suse.cz> References: <20171011200603.27442-1-jack@suse.cz> Cc: , , Christoph Hellwig , Dan Williams , Ross Zwisler , Ted Tso , "Darrick J. Wong" , Jan Kara To: Return-path: In-Reply-To: <20171011200603.27442-1-jack@suse.cz> Sender: linux-fsdevel-owner@vger.kernel.org List-Id: linux-ext4.vger.kernel.org Now when everything is prepared, add support in xfs to accept MAP_SYNC as an mmap(2) flag. Signed-off-by: Jan Kara --- 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 #include #include +#include #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 #include #include +#include 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; + + return xfs_file_mmap(filp, vma); +} + const struct file_operations xfs_file_operations = { .llseek = xfs_file_llseek, .read_iter = xfs_file_read_iter, @@ -1153,6 +1175,7 @@ const struct file_operations xfs_file_operations = { .compat_ioctl = xfs_file_compat_ioctl, #endif .mmap = xfs_file_mmap, + .mmap_validate = xfs_file_mmap_validate, .open = xfs_file_open, .release = xfs_file_release, .fsync = xfs_file_fsync, -- 2.12.3