From: Alistair Popple <apopple@nvidia.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>,
Matthias Brugger <matthias.bgg@gmail.com>,
John Hubbard <jhubbard@nvidia.com>,
chinwen.chang@mediatek.com, andrew.yang@mediatek.com,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org
Subject: Re: [PATCH] mm/gup: Add folio to list when folio_isolate_lru() succeed
Date: Thu, 02 Feb 2023 17:09:02 +1100 [thread overview]
Message-ID: <87a61wmtpq.fsf@nvidia.com> (raw)
In-Reply-To: <20230131151742.df43c3fd11bda01b613234ef@linux-foundation.org>
Andrew Morton <akpm@linux-foundation.org> writes:
> On Tue, 31 Jan 2023 14:32:06 +0800 Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com> wrote:
>
>> If we call folio_isolate_lru() successfully, we will get
>> return value 0. We need to add this folio to the
>> movable_pages_list.
Ugh, thanks for catching this:
Reviewed-by: Alistair Popple <apopple@nvidia.com>
>> Fixes: 67e139b02d99 ("mm/gup.c: refactor check_and_migrate_movable_pages()")
>> Signed-off-by: Kuan-Ying Lee <Kuan-Ying.Lee@mediatek.com>
>>
>> ...
>>
>> --- a/mm/gup.c
>> +++ b/mm/gup.c
>> @@ -1914,7 +1914,7 @@ static unsigned long collect_longterm_unpinnable_pages(
>> drain_allow = false;
>> }
>>
>> - if (!folio_isolate_lru(folio))
>> + if (folio_isolate_lru(folio))
>> continue;
>>
>> list_add_tail(&folio->lru, movable_page_list);
>
> Thanks. What are the user-visible effects of this bug?
In the common case none other than an extra loop through
collect_longterm_unpinnable_pages():
1. First call to collect_longterm_unpinnable_pages() will increment
collected and isolate the page but not add it to movable_page_list.
2. migrate_longterm_unpinnable_pages() will return -EAGAIN and unpin all
the pages but they will remain LRU isolated.
3. The next spin around __gup_longterm_locked() will re-pin the pages
and re-call collect_longterm_unpinnable_pages(). As the page has
already been isolated folio_isolate_lru() will return -EBUSY which
will add the page to movable_page_list and complete processing as
intended.
However this assumes the page table still points to the same page when
__get_user_pages_locked() is called the second time. That may not be the
case in which case we would leave the page LRU isolated forever
effectively leaving an unmovable page in a movable zone which is what we
were trying to avoid in the first place.
So I think Cc: stable is warranted.
- Alistair
next prev parent reply other threads:[~2023-02-02 7:07 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-31 6:32 Kuan-Ying Lee
2023-01-31 23:17 ` Andrew Morton
2023-02-02 2:13 ` Kuan-Ying Lee (李冠穎)
2023-02-02 6:09 ` Alistair Popple [this message]
2023-02-01 9:08 ` Baolin Wang
2023-02-02 8:39 ` David Hildenbrand
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=87a61wmtpq.fsf@nvidia.com \
--to=apopple@nvidia.com \
--cc=Kuan-Ying.Lee@mediatek.com \
--cc=akpm@linux-foundation.org \
--cc=andrew.yang@mediatek.com \
--cc=chinwen.chang@mediatek.com \
--cc=jhubbard@nvidia.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-mm@kvack.org \
--cc=matthias.bgg@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox