All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hugh Dickins <hughd@google.com>
To: Axel Rasmussen <axelrasmussen@google.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Hugh Dickins <hughd@google.com>,
	Jerome Glisse <jglisse@redhat.com>, Joe Perches <joe@perches.com>,
	Lokesh Gidra <lokeshgidra@google.com>,
	Mike Kravetz <mike.kravetz@oracle.com>,
	Mike Rapoport <rppt@linux.vnet.ibm.com>,
	Peter Xu <peterx@redhat.com>, Shaohua Li <shli@fb.com>,
	Shuah Khan <shuah@kernel.org>,
	Stephen Rothwell <sfr@canb.auug.org.au>,
	Wang Qing <wangqing@vivo.com>,
	linux-api@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org,
	linux-mm@kvack.org, Brian Geffon <bgeffon@google.com>,
	"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
	Mina Almasry <almasrymina@google.com>,
	Oliver Upton <oupton@google.com>
Subject: Re: [PATCH v5 06/10] userfaultfd/shmem: modify shmem_mcopy_atomic_pte to use install_pte()
Date: Tue, 27 Apr 2021 17:58:16 -0700 (PDT)	[thread overview]
Message-ID: <alpine.LSU.2.11.2104271704110.7111@eggly.anvils> (raw)
In-Reply-To: <20210427225244.4326-7-axelrasmussen@google.com>

On Tue, 27 Apr 2021, Axel Rasmussen wrote:

> In a previous commit, we added the mcopy_atomic_install_pte() helper.
> This helper does the job of setting up PTEs for an existing page, to map
> it into a given VMA. It deals with both the anon and shmem cases, as
> well as the shared and private cases.
> 
> In other words, shmem_mcopy_atomic_pte() duplicates a case it already
> handles. So, expose it, and let shmem_mcopy_atomic_pte() use it
> directly, to reduce code duplication.
> 
> This requires that we refactor shmem_mcopy_atomic_pte() a bit:
> 
> Instead of doing accounting (shmem_recalc_inode() et al) part-way
> through the PTE setup, do it afterward. This frees up
> mcopy_atomic_install_pte() from having to care about this accounting,
> and means we don't need to e.g. shmem_uncharge() in the error path.
> 
> A side effect is this switches shmem_mcopy_atomic_pte() to use
> lru_cache_add_inactive_or_unevictable() instead of just lru_cache_add().
> This wrapper does some extra accounting in an exceptional case, if
> appropriate, so it's actually the more correct thing to use.
> 
> Signed-off-by: Axel Rasmussen <axelrasmussen@google.com>

Not quite. Two things.

One, in this version, delete_from_page_cache(page) has vanished
from the particular error path which needs it.

Two, and I think this predates your changes (so needs a separate
fix patch first, for backport to stable? a user with bad intentions
might be able to trigger the BUG), in pondering the new error paths
and that /* don't free the page */ one in particular, isn't it the
case that the shmem_inode_acct_block() on entry might succeed the
first time, but atomic copy fail so -ENOENT, then something else
fill up the tmpfs before the retry comes in, so that retry then
fail with -ENOMEM, and hit the BUG_ON(page) in __mcopy_atomic()?

(As I understand it, the shmem_inode_unacct_blocks() has to be
done before returning, because the caller may be unable to retry.)

What the right fix is rather depends on other uses of __mcopy_atomic():
if they obviously cannot hit that BUG_ON(page), you may prefer to leave
it in, and fix it here where shmem_inode_acct_block() fails. Or you may
prefer instead to delete that "else BUG_ON(page);" - looks as if that
would end up doing the right thing.  Peter may have a preference.

(Or, we could consider doing the shmem_inode_acct_block() only after
the page has been copied in: its current placing reflects how shmem.c
does it elsewhere, and there's reason for that, but it doesn't always
work out right. Don't be surprised if I change the ordering in future,
but it's probably best not to mess with that ordering now.)

Sorry, if this is a pre-existing issue, then we are taking advantage
of you, in asking you to fix it: but I hope that while you're in there,
it will make sense to do so.

Thanks,
Hugh

> ---
>  include/linux/userfaultfd_k.h |  5 ++++
>  mm/shmem.c                    | 48 +++++------------------------------
>  mm/userfaultfd.c              | 17 +++++--------
>  3 files changed, 18 insertions(+), 52 deletions(-)

  reply	other threads:[~2021-04-28  0:58 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-27 22:52 [PATCH v5 00/10] userfaultfd: add minor fault handling for shmem Axel Rasmussen
2021-04-27 22:52 ` Axel Rasmussen
2021-04-27 22:52 ` [PATCH v5 01/10] userfaultfd/hugetlbfs: avoid including userfaultfd_k.h in hugetlb.h Axel Rasmussen
2021-04-27 22:52   ` Axel Rasmussen
2021-04-27 22:52 ` [PATCH v5 02/10] userfaultfd/shmem: combine shmem_{mcopy_atomic,mfill_zeropage}_pte Axel Rasmussen
2021-04-27 22:52   ` Axel Rasmussen
2021-04-27 22:52 ` [PATCH v5 03/10] userfaultfd/shmem: support minor fault registration for shmem Axel Rasmussen
2021-04-27 22:52   ` Axel Rasmussen
2021-04-28  0:02   ` Hugh Dickins
2021-04-28  0:02     ` Hugh Dickins
2021-04-27 22:52 ` [PATCH v5 04/10] userfaultfd/shmem: support UFFDIO_CONTINUE " Axel Rasmussen
2021-04-27 22:52   ` Axel Rasmussen
2021-04-28  0:03   ` Hugh Dickins
2021-04-28  0:03     ` Hugh Dickins
2021-04-28 15:10   ` Peter Xu
2021-04-27 22:52 ` [PATCH v5 05/10] userfaultfd/shmem: advertise shmem minor fault support Axel Rasmussen
2021-04-27 22:52   ` Axel Rasmussen
2021-04-28  0:04   ` Hugh Dickins
2021-04-28  0:04     ` Hugh Dickins
2021-04-28 15:11   ` Peter Xu
2021-04-27 22:52 ` [PATCH v5 06/10] userfaultfd/shmem: modify shmem_mcopy_atomic_pte to use install_pte() Axel Rasmussen
2021-04-27 22:52   ` Axel Rasmussen
2021-04-28  0:58   ` Hugh Dickins [this message]
2021-04-28  0:58     ` Hugh Dickins
2021-04-28 15:56     ` Peter Xu
2021-04-28 15:59       ` Axel Rasmussen
2021-04-28 15:59         ` Axel Rasmussen
2021-04-28 16:23         ` Peter Xu
2021-04-27 22:52 ` [PATCH v5 07/10] userfaultfd/selftests: use memfd_create for shmem test type Axel Rasmussen
2021-04-27 22:52   ` Axel Rasmussen
2021-04-27 22:52 ` [PATCH v5 08/10] userfaultfd/selftests: create alias mappings in the shmem test Axel Rasmussen
2021-04-27 22:52   ` Axel Rasmussen
2021-04-27 22:52 ` [PATCH v5 09/10] userfaultfd/selftests: reinitialize test context in each test Axel Rasmussen
2021-04-27 22:52   ` Axel Rasmussen
2021-04-28 17:23   ` Peter Xu
2021-05-18 20:57   ` Peter Xu
2021-05-18 22:28     ` Axel Rasmussen
2021-05-18 22:28       ` Axel Rasmussen
2021-04-27 22:52 ` [PATCH v5 10/10] userfaultfd/selftests: exercise minor fault handling shmem support Axel Rasmussen
2021-04-27 22:52   ` Axel Rasmussen
2021-04-28 17:26   ` Peter Xu

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=alpine.LSU.2.11.2104271704110.7111@eggly.anvils \
    --to=hughd@google.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=almasrymina@google.com \
    --cc=axelrasmussen@google.com \
    --cc=bgeffon@google.com \
    --cc=dgilbert@redhat.com \
    --cc=jglisse@redhat.com \
    --cc=joe@perches.com \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lokeshgidra@google.com \
    --cc=mike.kravetz@oracle.com \
    --cc=oupton@google.com \
    --cc=peterx@redhat.com \
    --cc=rppt@linux.vnet.ibm.com \
    --cc=sfr@canb.auug.org.au \
    --cc=shli@fb.com \
    --cc=shuah@kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    --cc=wangqing@vivo.com \
    /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.