linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 2/5] ext4: call dax_get_unmapped_area() for DAX pmd mappings
@ 2016-04-12 20:39 Toshi Kani
  2016-04-12 20:39 ` [PATCH v2 3/5] xfs: " Toshi Kani
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Toshi Kani @ 2016-04-12 20:39 UTC (permalink / raw)
  To: akpm, dan.j.williams
  Cc: linux-nvdimm, linux-fsdevel, linux-kernel, Toshi Kani,
	Theodore Ts'o, Andreas Dilger, Jan Kara, Matthew Wilcox,
	Ross Zwisler, linux-ext4

To support DAX pmd mappings with unmodified applications,
filesystems need to align an mmap address by the pmd size.

Call dax_get_unmapped_area() from f_op->get_unmapped_area.

Note, there is no change in behavior for a non-DAX file.

Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Cc: Theodore Ts'o <tytso@mit.edu>
Cc: Andreas Dilger <adilger.kernel@dilger.ca>
Cc: Jan Kara <jack@suse.cz>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Matthew Wilcox <willy@linux.intel.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: <linux-ext4@vger.kernel.org>
---
 fs/ext4/file.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/fs/ext4/file.c b/fs/ext4/file.c
index fa2208b..2abc57b 100644
--- a/fs/ext4/file.c
+++ b/fs/ext4/file.c
@@ -708,6 +708,9 @@ const struct file_operations ext4_file_operations = {
 	.open		= ext4_file_open,
 	.release	= ext4_release_file,
 	.fsync		= ext4_sync_file,
+#ifdef CONFIG_FS_DAX
+	.get_unmapped_area = dax_get_unmapped_area,
+#endif
 	.splice_read	= generic_file_splice_read,
 	.splice_write	= iter_file_splice_write,
 	.fallocate	= ext4_fallocate,

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 3/5] xfs: call dax_get_unmapped_area() for DAX pmd mappings
  2016-04-12 20:39 [PATCH v2 2/5] ext4: call dax_get_unmapped_area() for DAX pmd mappings Toshi Kani
@ 2016-04-12 20:39 ` Toshi Kani
  2016-04-12 20:39 ` [PATCH v2 4/5] ext2: " Toshi Kani
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Toshi Kani @ 2016-04-12 20:39 UTC (permalink / raw)
  To: akpm, dan.j.williams
  Cc: linux-nvdimm, linux-fsdevel, linux-kernel, Toshi Kani,
	Dave Chinner, Matthew Wilcox, Ross Zwisler, xfs

To support DAX pmd mappings with unmodified applications,
filesystems need to align an mmap address by the pmd size.

Call dax_get_unmapped_area() from f_op->get_unmapped_area.

Note, there is no change in behavior for a non-DAX file.

Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Cc: Dave Chinner <david@fromorbit.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Matthew Wilcox <willy@linux.intel.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: <xfs@oss.sgi.com>
---
 fs/xfs/xfs_file.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index 569938a..51c554b 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -1708,6 +1708,9 @@ const struct file_operations xfs_file_operations = {
 	.open		= xfs_file_open,
 	.release	= xfs_file_release,
 	.fsync		= xfs_file_fsync,
+#ifdef CONFIG_FS_DAX
+	.get_unmapped_area = dax_get_unmapped_area,
+#endif
 	.fallocate	= xfs_file_fallocate,
 };
 

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 4/5] ext2: call dax_get_unmapped_area() for DAX pmd mappings
  2016-04-12 20:39 [PATCH v2 2/5] ext4: call dax_get_unmapped_area() for DAX pmd mappings Toshi Kani
  2016-04-12 20:39 ` [PATCH v2 3/5] xfs: " Toshi Kani
@ 2016-04-12 20:39 ` Toshi Kani
  2016-04-12 20:39 ` [PATCH v2 5/5] block: " Toshi Kani
  2016-04-13  3:01 ` [PATCH v2 2/5] ext4: " Matthew Wilcox
  3 siblings, 0 replies; 8+ messages in thread
From: Toshi Kani @ 2016-04-12 20:39 UTC (permalink / raw)
  To: akpm, dan.j.williams
  Cc: linux-nvdimm, linux-fsdevel, linux-kernel, Toshi Kani, Jan Kara,
	Matthew Wilcox, Ross Zwisler, linux-ext4

To support DAX pmd mappings with unmodified applications,
filesystems need to align an mmap address by the pmd size.

Call dax_get_unmapped_area() from f_op->get_unmapped_area.

Note, there is no change in behavior for a non-DAX file.

Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Cc: Jan Kara <jack@suse.cz>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Matthew Wilcox <willy@linux.intel.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Cc: <linux-ext4@vger.kernel.org>
---
 fs/ext2/file.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/fs/ext2/file.c b/fs/ext2/file.c
index c1400b1..f1b8006 100644
--- a/fs/ext2/file.c
+++ b/fs/ext2/file.c
@@ -172,6 +172,9 @@ const struct file_operations ext2_file_operations = {
 	.open		= dquot_file_open,
 	.release	= ext2_release_file,
 	.fsync		= ext2_fsync,
+#ifdef CONFIG_FS_DAX
+	.get_unmapped_area = dax_get_unmapped_area,
+#endif
 	.splice_read	= generic_file_splice_read,
 	.splice_write	= iter_file_splice_write,
 };

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH v2 5/5] block: call dax_get_unmapped_area() for DAX pmd mappings
  2016-04-12 20:39 [PATCH v2 2/5] ext4: call dax_get_unmapped_area() for DAX pmd mappings Toshi Kani
  2016-04-12 20:39 ` [PATCH v2 3/5] xfs: " Toshi Kani
  2016-04-12 20:39 ` [PATCH v2 4/5] ext2: " Toshi Kani
@ 2016-04-12 20:39 ` Toshi Kani
  2016-04-13  3:01 ` [PATCH v2 2/5] ext4: " Matthew Wilcox
  3 siblings, 0 replies; 8+ messages in thread
From: Toshi Kani @ 2016-04-12 20:39 UTC (permalink / raw)
  To: akpm, dan.j.williams
  Cc: linux-nvdimm, linux-fsdevel, linux-kernel, Toshi Kani,
	Alexander Viro, Matthew Wilcox, Ross Zwisler

To support DAX pmd mappings with unmodified applications,
filesystems need to align an mmap address by the pmd size.

Call dax_get_unmapped_area() from f_op->get_unmapped_area.

Note, there is no change in behavior for a non-DAX file.

Signed-off-by: Toshi Kani <toshi.kani@hpe.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Matthew Wilcox <willy@linux.intel.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
---
 fs/block_dev.c |    3 +++
 1 file changed, 3 insertions(+)

diff --git a/fs/block_dev.c b/fs/block_dev.c
index 20a2c02..0274802 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1798,6 +1798,9 @@ const struct file_operations def_blk_fops = {
 	.write_iter	= blkdev_write_iter,
 	.mmap		= blkdev_mmap,
 	.fsync		= blkdev_fsync,
+#ifdef CONFIG_FS_DAX
+	.get_unmapped_area = dax_get_unmapped_area,
+#endif
 	.unlocked_ioctl	= block_ioctl,
 #ifdef CONFIG_COMPAT
 	.compat_ioctl	= compat_blkdev_ioctl,

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 2/5] ext4: call dax_get_unmapped_area() for DAX pmd mappings
  2016-04-12 20:39 [PATCH v2 2/5] ext4: call dax_get_unmapped_area() for DAX pmd mappings Toshi Kani
                   ` (2 preceding siblings ...)
  2016-04-12 20:39 ` [PATCH v2 5/5] block: " Toshi Kani
@ 2016-04-13  3:01 ` Matthew Wilcox
  2016-04-13 15:08   ` Toshi Kani
  3 siblings, 1 reply; 8+ messages in thread
From: Matthew Wilcox @ 2016-04-13  3:01 UTC (permalink / raw)
  To: Toshi Kani
  Cc: akpm, dan.j.williams, linux-nvdimm, linux-fsdevel, linux-kernel,
	Theodore Ts'o, Andreas Dilger, Jan Kara, Ross Zwisler,
	linux-ext4

On Tue, Apr 12, 2016 at 02:39:29PM -0600, Toshi Kani wrote:
> To support DAX pmd mappings with unmodified applications,
> filesystems need to align an mmap address by the pmd size.

> @@ -708,6 +708,9 @@ const struct file_operations ext4_file_operations = {
>  	.open		= ext4_file_open,
>  	.release	= ext4_release_file,
>  	.fsync		= ext4_sync_file,
> +#ifdef CONFIG_FS_DAX
> +	.get_unmapped_area = dax_get_unmapped_area,
> +#endif
>  	.splice_read	= generic_file_splice_read,
>  	.splice_write	= iter_file_splice_write,
>  	.fallocate	= ext4_fallocate,

Could you do something like:

 #ifdef CONFIG_FS_DAX
 struct page *read_dax_sector(struct block_device *bdev, sector_t n);
+unsigned long dax_get_unmapped_area(struct file *filp, unsigned long addr,
+               unsigned long len, unsigned long pgoff, unsigned long flags);
 #else
 static inline struct page *read_dax_sector(struct block_device *bdev,
                 sector_t n)
 {
         return ERR_PTR(-ENXIO);
 }
+#define dax_get_unmapped_area	NULL
 #endif

in patch 1/5.  Then there's no need for the ifdefs in each filesystem.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 2/5] ext4: call dax_get_unmapped_area() for DAX pmd mappings
  2016-04-13  3:01 ` [PATCH v2 2/5] ext4: " Matthew Wilcox
@ 2016-04-13 15:08   ` Toshi Kani
  2016-04-13 18:22     ` Matthew Wilcox
  0 siblings, 1 reply; 8+ messages in thread
From: Toshi Kani @ 2016-04-13 15:08 UTC (permalink / raw)
  To: Matthew Wilcox
  Cc: akpm, dan.j.williams, linux-nvdimm, linux-fsdevel, linux-kernel,
	Theodore Ts'o, Andreas Dilger, Jan Kara, Ross Zwisler,
	linux-ext4

On Tue, 2016-04-12 at 23:01 -0400, Matthew Wilcox wrote:
> On Tue, Apr 12, 2016 at 02:39:29PM -0600, Toshi Kani wrote:
> > 
> > To support DAX pmd mappings with unmodified applications,
> > filesystems need to align an mmap address by the pmd size.
> > 
> > @@ -708,6 +708,9 @@ const struct file_operations ext4_file_operations =
> > {
> >  	.open		= ext4_file_open,
> >  	.release	= ext4_release_file,
> >  	.fsync		= ext4_sync_file,
> > +#ifdef CONFIG_FS_DAX
> > +	.get_unmapped_area = dax_get_unmapped_area,
> > +#endif
> >  	.splice_read	= generic_file_splice_read,
> >  	.splice_write	= iter_file_splice_write,
> >  	.fallocate	= ext4_fallocate,
>
> Could you do something like:
> 
>  #ifdef CONFIG_FS_DAX
>  struct page *read_dax_sector(struct block_device *bdev, sector_t n);
> +unsigned long dax_get_unmapped_area(struct file *filp, unsigned long
> addr,
> +               unsigned long len, unsigned long pgoff, unsigned long
> flags);
>  #else
>  static inline struct page *read_dax_sector(struct block_device *bdev,
>                  sector_t n)
>  {
>          return ERR_PTR(-ENXIO);
>  }
> +#define dax_get_unmapped_area	NULL
>  #endif
> 
> in patch 1/5.  Then there's no need for the ifdefs in each filesystem.

I thought about it, but I do not think we can use an inline function to an
entry point.

Thanks,
-Toshi

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 2/5] ext4: call dax_get_unmapped_area() for DAX pmd mappings
  2016-04-13 15:08   ` Toshi Kani
@ 2016-04-13 18:22     ` Matthew Wilcox
  2016-04-13 18:52       ` Toshi Kani
  0 siblings, 1 reply; 8+ messages in thread
From: Matthew Wilcox @ 2016-04-13 18:22 UTC (permalink / raw)
  To: Toshi Kani
  Cc: akpm, dan.j.williams, linux-nvdimm, linux-fsdevel, linux-kernel,
	Theodore Ts'o, Andreas Dilger, Jan Kara, Ross Zwisler,
	linux-ext4

On Wed, Apr 13, 2016 at 09:08:36AM -0600, Toshi Kani wrote:
> > Could you do something like:
> > 
> > �#ifdef CONFIG_FS_DAX
> > �struct page *read_dax_sector(struct block_device *bdev, sector_t n);
> > +unsigned long dax_get_unmapped_area(struct file *filp, unsigned long
> > addr,
> > +���������������unsigned long len, unsigned long pgoff, unsigned long
> > flags);
> > �#else
> > �static inline struct page *read_dax_sector(struct block_device *bdev,
> > �����������������sector_t n)
> > �{
> > ���������return ERR_PTR(-ENXIO);
> > �}
> > +#define dax_get_unmapped_area	NULL
> > �#endif
> > 
> > in patch 1/5.��Then there's no need for the ifdefs in each filesystem.
> 
> I thought about it, but I do not think we can use an inline function to an
> entry point.

That's not an inline function.  It's just NULL.  So after the preprocessor
is done with it, it just looks like:

	.get_unmapped_area = NULL,

and it won't be called by get_unmapped_area().

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2 2/5] ext4: call dax_get_unmapped_area() for DAX pmd mappings
  2016-04-13 18:22     ` Matthew Wilcox
@ 2016-04-13 18:52       ` Toshi Kani
  0 siblings, 0 replies; 8+ messages in thread
From: Toshi Kani @ 2016-04-13 18:52 UTC (permalink / raw)
  To: Matthew Wilcox
  Cc: akpm, dan.j.williams, linux-nvdimm, linux-fsdevel, linux-kernel,
	Theodore Ts'o, Andreas Dilger, Jan Kara, Ross Zwisler,
	linux-ext4

On Wed, 2016-04-13 at 14:22 -0400, Matthew Wilcox wrote:
> On Wed, Apr 13, 2016 at 09:08:36AM -0600, Toshi Kani wrote:
> > 
> > > 
> > > Could you do something like:
> > > 
> > >  #ifdef CONFIG_FS_DAX
> > >  struct page *read_dax_sector(struct block_device *bdev, sector_t n);
> > > +unsigned long dax_get_unmapped_area(struct file *filp, unsigned long
> > > addr,
> > > +               unsigned long len, unsigned long pgoff, unsigned long
> > > flags);
> > >  #else
> > >  static inline struct page *read_dax_sector(struct block_device
> > > *bdev,
> > >                  sector_t n)
> > >  {
> > >          return ERR_PTR(-ENXIO);
> > >  }
> > > +#define dax_get_unmapped_area	NULL
> > >  #endif
> > > 
> > > in patch 1/5.  Then there's no need for the ifdefs in each
> > > filesystem.
> >
> > I thought about it, but I do not think we can use an inline function to
> > an entry point.
>
> That's not an inline function.  It's just NULL.  So after the
> preprocessor is done with it, it just looks like:
> 
> 	.get_unmapped_area = NULL,
> 
> and it won't be called by get_unmapped_area().

Oh, I see. Good idea. I will do that.

Thanks,
-Toshi

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2016-04-13 19:01 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-12 20:39 [PATCH v2 2/5] ext4: call dax_get_unmapped_area() for DAX pmd mappings Toshi Kani
2016-04-12 20:39 ` [PATCH v2 3/5] xfs: " Toshi Kani
2016-04-12 20:39 ` [PATCH v2 4/5] ext2: " Toshi Kani
2016-04-12 20:39 ` [PATCH v2 5/5] block: " Toshi Kani
2016-04-13  3:01 ` [PATCH v2 2/5] ext4: " Matthew Wilcox
2016-04-13 15:08   ` Toshi Kani
2016-04-13 18:22     ` Matthew Wilcox
2016-04-13 18:52       ` Toshi Kani

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).