Re: [PATCH v4 RESEND 0/2] Align mmap address for DAX pmd mappings

From: Kani, Toshimitsu
Date: Mon Aug 29 2016 - 18:34:45 EST


On Mon, 2016-08-29 at 15:31 -0600, Kani, Toshimitsu wrote:
> On Mon, 2016-08-29 at 23:48 +0300, Kirill A. Shutemov wrote:
> >
> > On Mon, Aug 29, 2016 at 01:11:19PM -0600, Toshi Kani wrote:
> > >
> > >
> > > When CONFIG_FS_DAX_PMD is set, DAX supports mmap() using pmd page
> > > size.ÂÂThis feature relies on both mmap virtual address and FS
> > > block (i.e. physical address) to be aligned by the pmd page size.
> > > Users can use mkfs options to specify FS to align block
> > > allocations. However, aligning mmap address requires code changes
> > > to existing applications for providing a pmd-aligned address to
> > > mmap().
> > >
> > > For instance, fio with "ioengine=mmap" performs I/Os with mmap()
> > > [1]. It calls mmap() with a NULL address, which needs to be
> > > changed to provide a pmd-aligned address for testing with DAX pmd
> > > mappings. Changing all applications that call mmap() with NULL is
> > > undesirable.
> > >
> > > This patch-set extends filesystems to align an mmap address for
> > > a DAX file so that unmodified applications can use DAX pmd
> > > mappings.
> >
> > +Hugh
> >
> > Can we get it used for shmem/tmpfs too?
> > I don't think we should duplicate essentially the same
> > functionality in multiple places.
>
> Here is my brief analysis when I had looked at the Hugh's patch last
> time (beforeÂshmem_get_unmapped_area() was accepted).
> https://patchwork.kernel.org/patch/8916741/
>
> Besides some differences in the logic, ex. shmem_get_unmapped_area()
> always callsÂcurrent->mm->get_unmapped_area twice, yes, they
> basically provide the same functionality.
>
> I think one issue is that shmem_get_unmapped_area() checks with its
> static flag 'shmem_huge', and additinally deals with SHMEM_HUGE_DENY
> andÂSHMEM_HUGE_FORCE cases. ÂIt also handles non-file case for
> !SHMEM_HUGE_FORCE.

Looking further, these shmem_huge handlings only check pre-conditions.
ÂSo, we should be able to make shmem_get_unmapped_area() as a wrapper,
which checks such shmem-specific conitions, and then
callÂ__thp_get_unmapped_area() for the actual work. ÂAll DAX-specific
checks are performed in thp_get_unmapped_area() as well. ÂWe can make
Â__thp_get_unmapped_area() as a common function.

I'd prefer to make such change as a separate item, but I can include it
to this patch series if needed.Â

Thanks,
-Toshi