Re: [PATCH v2 1/4] mm: Introduce vm_uffd_ops API

Mike Rapoport
2025-09-18T08:37:24Z

On Wed, Sep 17, 2025 at 12:53:05PM -0400, Liam R. Howlett wrote:
> * Mike Rapoport <rppt@kernel.org> [250917 05:26]:
> > Hi Liam,
> >
> > On Mon, Sep 08, 2025 at 12:53:37PM -0400, Liam R. Howlett wrote:
> > >
> > > Reading through the patches, I'm not entirely sure what you are
> > > proposing.
> > >
> > > What I was hoping to see by a generalization of the memory types is a
> > > much simpler shared code base until the code hit memory type specific
> > > areas where a function pointer could be used to keep things from getting
> > > complicated (or, I guess a switch statement..).
> > >
> > > What we don't want is non-mm code specifying values for the function
> > > pointer and doing what they want, or a function pointer that returns a
> > > core mm resource (in the old example this was a vma, here it is a
> > > folio).
> > >
> > > From this patch set:
> > > + * Return: zero if succeeded, negative for errors.
> > > + */
> > > + int (*uffd_get_folio)(struct inode *inode, pgoff_t pgoff,
> > > + struct folio **folio);
> > >
> > > This is one of the contention points in the current scenario as the
> > > folio would be returned.
> >
> > I don't see a problem with it. It's not any different from
> > vma_ops->fault(): a callback for a filesystem to get a folio that will be
> > mapped afterwards by the mm code.
> >
>
> I disagree, the filesystem vma_ops->fault() is not a config option like
> this one. So we are on a path to enable uffd by default, and it really
> needs work beyond this series. Setting up a list head and passing in
> through every call stack is far from idea.

I don't follow you here. How addition of uffd callbacks guarded by a config
option to vma_ops leads to enabling uffd by by default?

> I also think the filesystem model is not one we want to duplicate in mm
> for memory types - think of the test issues we have now and then have a
> look at the xfstests support of filesystems [1].
>
> So we are on a path of less test coverage, and more code that is
> actually about mm that is outside of mm. So, is there another way?

There are quite a few vma_ops outside fs/ not covered by xfstest, so the
test coverage argument is moot at best.
And anything in the kernel can grab a folio and do whatever it pleases.

Nevertheless, let's step back for a second and instead focus on the problem
these patches are trying to solve, which is to allow guest_memfd implement
UFFD_CONTINUE (or minor fault in other terminology).

This means uffd should be able to map a folio that's already in
guest_memfd page cache to the faulted address. Obviously, the page table
update happens in uffd. But it still has to find what to map and we need
some way to let guest_memfd tell that to uffd.

So we need a hook somewhere that will return a folio matching pgoff in
vma->file->inode.

Do you see a way to implement it otherwise?

--
Sincerely yours,
Mike.