On Wed, Apr 03, 2019 at 04:10:18PM +0530, Pankaj Gupta wrote:
> Virtio pmem provides asynchronous host page cache flush
> mechanism. we don't support 'MAP_SYNC' with virtio pmem 
> and xfs.
> 
> Signed-off-by: Pankaj Gupta <pagu...@redhat.com>
> ---
>  fs/xfs/xfs_file.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
> index 1f2e2845eb76..dced2eb8c91a 100644
> --- a/fs/xfs/xfs_file.c
> +++ b/fs/xfs/xfs_file.c
> @@ -1203,6 +1203,14 @@ xfs_file_mmap(
>       if (!IS_DAX(file_inode(filp)) && (vma->vm_flags & VM_SYNC))
>               return -EOPNOTSUPP;
>  
> +     /* We don't support synchronous mappings with DAX files if
> +      * dax_device is not synchronous.
> +      */
> +     if (IS_DAX(file_inode(filp)) && !dax_synchronous(
> +             xfs_find_daxdev_for_inode(file_inode(filp))) &&
> +                                     (vma->vm_flags & VM_SYNC))
> +             return -EOPNOTSUPP;
> +
>       file_accessed(filp);
>       vma->vm_ops = &xfs_file_vm_ops;
>       if (IS_DAX(file_inode(filp)))

All this ad hoc IS_DAX conditional logic is getting pretty nasty.

xfs_file_mmap(
....
{
        struct inode    *inode = file_inode(filp);

        if (vma->vm_flags & VM_SYNC) {
                if (!IS_DAX(inode))
                        return -EOPNOTSUPP;
                if (!dax_synchronous(xfs_find_daxdev_for_inode(inode))
                        return -EOPNOTSUPP;
        }

        file_accessed(filp);
        vma->vm_ops = &xfs_file_vm_ops;
        if (IS_DAX(inode))
                vma->vm_flags |= VM_HUGEPAGE;
        return 0;
}


Even better, factor out all the "MAP_SYNC supported" checks into a
helper so that the filesystem code just doesn't have to care about
the details of checking for DAX+MAP_SYNC support....

Cheers,

Dave.
-- 
Dave Chinner
da...@fromorbit.com
_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to