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 <pagupta at 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 david at fromorbit.com
Darrick J. Wong
2019-Apr-03 22:39 UTC
[PATCH v4 5/5] xfs: disable map_sync for async flush
On Thu, Apr 04, 2019 at 09:09:12AM +1100, Dave Chinner wrote:> 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 <pagupta at 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....Seconded, since ext4 has nearly the same flag validation logic. --D> > Cheers, > > Dave. > -- > Dave Chinner > david at fromorbit.com
Hi Dave,> > 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 <pagupta at 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; > }Sure, this is better.> > > 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....o.k. Will add one common helper function for both ext4 & xfs filesystems. Thanks for the suggestion. Best regards, Pankaj> > Cheers, > > Dave. > -- > Dave Chinner > david at fromorbit.com >
> > On Thu, Apr 04, 2019 at 09:09:12AM +1100, Dave Chinner wrote: > > 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 <pagupta at 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.... > > Seconded, since ext4 has nearly the same flag validation logic.Agree. Thanks, Pankaj> > --D > > > > > Cheers, > > > > Dave. > > -- > > Dave Chinner > > david at fromorbit.com >
On Thu, Apr 04, 2019 at 02:12:30AM -0400, Pankaj Gupta wrote:> > 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; > > } > > Sure, this is better.> > 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.... > > o.k. Will add one common helper function for both ext4 & xfs filesystems.Note this pending patch for Goldwyn Rodrigues' patchset for btrfs: https://lore.kernel.org/linux-btrfs/20190328102418.5466-1-kilobyte at angband.pl/ We might want to coordinate. Meow! -- ??????? ??????? Did ya know that typing "test -j8" instead of "ctest -j8" ??????? will make your testsuite pass much faster, and fix bugs? ???????
Reasonably Related Threads
- [PATCH v4 5/5] xfs: disable map_sync for async flush
- [PATCH v4 5/5] xfs: disable map_sync for async flush
- [Qemu-devel] [PATCH v4 5/5] xfs: disable map_sync for async flush
- [Qemu-devel] [PATCH v4 5/5] xfs: disable map_sync for async flush
- [PATCH v4 5/5] xfs: disable map_sync for async flush