From: Alistair Popple <apopple@nvidia.com>
To: John Hubbard <jhubbard@nvidia.com>
Cc: David Hildenbrand <david@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
LKML <linux-kernel@vger.kernel.org>,
linux-mm@kvack.org, Shigeru Yoshida <syoshida@redhat.com>,
Jason Gunthorpe <jgg@nvidia.com>,
Minchan Kim <minchan@kernel.org>,
Pasha Tatashin <pasha.tatashin@soleen.com>
Subject: Re: [PATCH v2 1/2] mm/gup: stop leaking pinned pages in low memory conditions
Date: Mon, 21 Oct 2024 09:59:39 +1100 [thread overview]
Message-ID: <8734kqcr5g.fsf@nvdebian.thelocal> (raw)
In-Reply-To: <ceeb9dd7-bef9-40c8-aead-c1325f1e3a3d@nvidia.com>
John Hubbard <jhubbard@nvidia.com> writes:
> On 10/18/24 12:47 AM, David Hildenbrand wrote:
>> On 18.10.24 03:17, John Hubbard wrote:
[...]
> And actually this whole thing of "pin the pages, just for a short time, even
> though you're not allowed to" is partly why this area is so entertaining.
I'm looking at your v3 but as an aside I disagree with this
statement. AFAIK you're always allowed to pin the pages for a short time
(ie. !FOLL_LONGTERM), or did I misunderstand your comment?
>> diff --git a/mm/gup.c b/mm/gup.c
>> index a82890b46a36..81fc8314e687 100644
>> --- a/mm/gup.c
>> +++ b/mm/gup.c
>> @@ -2403,8 +2403,9 @@ static int migrate_longterm_unpinnable_folios(
>> * -EAGAIN. The caller should re-pin the entire range with
>> FOLL_PIN and then
>> * call this routine again.
>> *
>> - * If an error other than -EAGAIN occurs, this indicates a
>> migration failure.
>> - * The caller should give up, and propagate the error back up the
>> call stack.
>> + * If an error occurs, all folios are unpinned. If an error other than
>> + * -EAGAIN occurs, this indicates a migration failure. The caller
>> should give
>> + * up, and propagate the error back up the call stack.
>> *
>> * If everything is OK and all folios in the range are allowed to
>> be pinned,
>> * then this routine leaves all folios pinned and returns zero for
>> success.
>> @@ -2437,8 +2438,10 @@ static long
>> check_and_migrate_movable_pages(unsigned long nr_pages,
>> long i, ret;
>> folios = kmalloc_array(nr_pages, sizeof(*folios),
>> GFP_KERNEL);
>> - if (!folios)
>> + if (!folios) {
>> + unpin_user_pages(pages, nr_pages);
>> return -ENOMEM;
>> + }
>> for (i = 0; i < nr_pages; i++)
>> folios[i] = page_folio(pages[i]);
>> Then, check_and_migrate_movable_pages() will never return with an
>> error and
>> having folios pinned.
>> If check_and_migrate_movable_pages() ->
>> check_and_migrate_movable_folios()
>> returns "0", all folios remain pinned an no harm is done.
>> Consequently, I think patch #2 is not really required, because it
>> doesn't
>> perform the temporary allocation that could fail with -ENOMEM.
>>
>
> Yes!
>
>> Sorry for taking a closer look only now ...
>>
>
> It's all still in review, so the timing is perfectly fine. I really
> appreciate the closer look, it's definitely making things better.
>
>
> thanks,
next prev parent reply other threads:[~2024-10-20 23:04 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-18 1:17 [PATCH v2 0/2] mm/gup: stop leaking pinned pages in low memory conditions John Hubbard
2024-10-18 1:17 ` [PATCH v2 1/2] " John Hubbard
2024-10-18 7:47 ` David Hildenbrand
2024-10-18 17:46 ` John Hubbard
2024-10-20 22:59 ` Alistair Popple [this message]
2024-10-21 6:33 ` John Hubbard
2024-10-18 1:17 ` [PATCH v2 2/2] mm/gup: memfd: " John Hubbard
2024-10-18 22:13 ` [PATCH v2 0/2] mm/gup: " Andrew Morton
2024-10-18 22:16 ` John Hubbard
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=8734kqcr5g.fsf@nvdebian.thelocal \
--to=apopple@nvidia.com \
--cc=akpm@linux-foundation.org \
--cc=david@redhat.com \
--cc=jgg@nvidia.com \
--cc=jhubbard@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=minchan@kernel.org \
--cc=pasha.tatashin@soleen.com \
--cc=syoshida@redhat.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.