On Wed 10-04-19 09:38:24, Pankaj Gupta wrote: > This patch introduces 'daxdev_mapping_supported' helper > which checks if 'MAP_SYNC' is supported with filesystem > mapping. It also checks if corresponding dax_device is > synchronous. Virtio pmem device is asynchronous and > does not not support VM_SYNC. > > Suggested-by: Jan Kara <jack@xxxxxxx> > Signed-off-by: Pankaj Gupta <pagupta@xxxxxxxxxx> > --- > include/linux/dax.h | 23 +++++++++++++++++++++++ > 1 file changed, 23 insertions(+) > > diff --git a/include/linux/dax.h b/include/linux/dax.h > index b896706a5ee9..4a2a60ffec86 100644 > --- a/include/linux/dax.h > +++ b/include/linux/dax.h > @@ -38,6 +38,24 @@ void kill_dax(struct dax_device *dax_dev); > void dax_write_cache(struct dax_device *dax_dev, bool wc); > bool dax_write_cache_enabled(struct dax_device *dax_dev); > bool dax_synchronous(struct dax_device *dax_dev); > + > +/* > + * Callers check if synchronous mapping is enabled for DAX file > + * and attached dax device is also synchronous. > + * > + * dax_synchronous function verifies if dax device is synchronous. > + * Currently, only virtio pmem device supports asynchronous device > + * flush. > + */ Thanks for the patch! I'd restructure this comment like: /* * Check if given mapping is supported by the file / underlying device. */ > +static inline bool daxdev_mapping_supported(struct vm_area_struct *vma, > + struct dax_device *dax_dev) > +{ /* Everyone supports non-sync mappings */ > + if (!(vma->vm_flags & VM_SYNC)) > + return true; /* Sync mappings are supported only for files using DAX */ > + if (!IS_DAX(file_inode(vma->vm_file))) > + return false; /* Underlying device must support persisting through CPU instructions */ > + return dax_synchronous(dax_dev); > +} > #else > static inline struct dax_device *dax_get_by_host(const char *host) > { > @@ -69,6 +87,11 @@ static inline bool dax_synchronous(struct dax_device *dax_dev) > { > return true; > } > +static inline bool daxdev_mapping_supported(struct vm_area_struct *vma, > + struct dax_device *dax_dev) > +{ > + return true; This looks wrong. Shouldn't it rather be: return !(vma->flags & VM_SYNC); ? Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR