From: Peter Xu <peterx@redhat.com>
To: David CARLIER <devnexen@gmail.com>
Cc: Mike Rapoport <rppt@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Lorenzo Stoakes <ljs@kernel.org>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
Vlastimil Babka <vbabka@kernel.org>
Subject: Re: [PATCH v4] mm/userfaultfd: detect VMA replacement after copy retry in mfill_copy_folio_retry()
Date: Wed, 1 Apr 2026 15:22:03 -0400 [thread overview]
Message-ID: <ac1wW6LHzzkXBeSl@x1.local> (raw)
In-Reply-To: <CA+XhMqz083g8D5xQ5bWNrWguwdBhFv9miMooDhDf1+862ggzNg@mail.gmail.com>
On Wed, Apr 01, 2026 at 07:34:47PM +0100, David CARLIER wrote:
> Hi Peter,
>
> On Tue, Apr 01, 2026 at 04:23:00PM +0300, Peter Xu wrote:
> > IMHO the flags is needed, consider a shared shmem vma remapped to a private
> > shmem vma. That needs to be covered in the fix.
>
> Right, I hadn't considered that case. Shared->private changes how
> the
> folio gets handled even with the same backing file. I'll keep the
> flags
> check.
>
> > Actually instead of reducing checks, maybe we also need to check
> the offset
> > of the mapping too, that is: vma->vm_pgoff can't change otherwise it may
> > also affect how the back store would behave on this UFFDIO_COPY
> request.
> >
> > For that, see the example of shmem_get_pgoff_policy() where it
> seems we can
> > apply different policies to different ranges of the back store.
>
> Good point. If vm_pgoff changes, linear_page_index() derives a
> different page cache offset for the same virtual address, and
> shmem_get_pgoff_policy() could apply a different NUMA policy to that
> range. So the folio could end up at the wrong offset or with the wrong
> placement.
>
> I'll add vm_pgoff to the snapshot. So the full set of checks after
> re-acquiring locks would be: vm_file, vm_flags, and vm_pgoff — ensuring
> the folio was allocated for the right backing file, at the right
> offset,
> with the right VMA type.
When caching the offset, we should likely use linear_page_index() with the
address provided rather than caching vma->vm_pgoff directly, then it'll
avoid same vm_pgoff while VMA mapping shifted like this:
VMA1: vm_pgoff=0x10000, vm_start=0x10000
VMA2: vm_pgoff=0x10000, vm_start=0xf000
So VMA1 unmapped, then the app mappped VMA2 at different VA but still cover
the address we're requesting for UFFDIO_COPY, even if the VMA will still
have the same vm_pgoff, the VA to access the same offset might change.
Using linear_page_index() will be accurate, IIUC.
The other thing is I just noticed the err code was changed to -EINVAL for
snapshot changed cases, sorry I didn't follow previously as closely on the
discussion. I think it should be -EAGAIN. It's because the userapp can't
resolve -EINVAL failures and app will crash. In a VMA change use case, we
should return -EAGAIN to imply the app to retry, rather than crashing.
Thanks,
--
Peter Xu
next prev parent reply other threads:[~2026-04-01 19:22 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-31 13:41 [PATCH v4] mm/userfaultfd: detect VMA replacement after copy retry in mfill_copy_folio_retry() David Carlier
2026-04-01 3:01 ` Andrew Morton
2026-04-01 7:49 ` Mike Rapoport
2026-04-01 8:06 ` David CARLIER
2026-04-01 15:23 ` Peter Xu
2026-04-01 18:34 ` David CARLIER
2026-04-01 19:22 ` Peter Xu [this message]
2026-04-01 20:05 ` David CARLIER
2026-04-02 4:02 ` Mike Rapoport
2026-04-02 5:59 ` David CARLIER
2026-04-02 13:29 ` Peter Xu
2026-04-09 11:20 ` Mike Rapoport
2026-04-10 15:10 ` Peter Xu
2026-04-02 3:58 ` Mike Rapoport
2026-04-02 13:42 ` Peter Xu
2026-04-09 11:31 ` Mike Rapoport
2026-04-10 15:26 ` Peter Xu
2026-04-12 15:46 ` Mike Rapoport
2026-04-13 12:53 ` Peter Xu
2026-04-07 10:17 ` Lorenzo Stoakes (Oracle)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ac1wW6LHzzkXBeSl@x1.local \
--to=peterx@redhat.com \
--cc=Liam.Howlett@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=devnexen@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=rppt@kernel.org \
--cc=vbabka@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.