Re: [External] Re: [PATCH v3 1/6] mm: migrate: do not migrate HugeTLB page whose refcount is one
From: Muchun Song <hidden>
Date: 2021-01-12 09:45:10
Also in:
lkml
On Tue, Jan 12, 2021 at 5:42 PM Michal Hocko [off-list ref] wrote:
On Sun 10-01-21 20:40:12, Muchun Song wrote:quoted
If the refcount is one when it is migrated, it means that the page was freed from under us. So we are done and do not need to migrate.I would consider the following easier to understand. Feel free to reuse. " All pages isolated for the migration have an elevated reference count and therefore seeing a reference count equal to 1 means that the last user of the page has dropped the reference and the page has became unused and there doesn't make much sense to migrate it anymore. This has been done for regular pages and this patch does the same for hugetlb pages. Although the likelyhood of the race is rather small for hugetlb pages it makes sense the two code paths in sync. "
Thanks.
quoted
This optimization is consistent with the regular pages, just like unmap_and_move() does. Signed-off-by: Muchun Song <redacted> Reviewed-by: Mike Kravetz <redacted> Acked-by: Yang Shi <redacted>Acked-by: Michal Hocko <mhocko@suse.com>
Thanks.
quoted
--- mm/migrate.c | 6 ++++++ 1 file changed, 6 insertions(+)diff --git a/mm/migrate.c b/mm/migrate.c index 4385f2fb5d18..a6631c4eb6a6 100644 --- a/mm/migrate.c +++ b/mm/migrate.c@@ -1279,6 +1279,12 @@ static int unmap_and_move_huge_page(new_page_t get_new_page, return -ENOSYS; } + if (page_count(hpage) == 1) { + /* page was freed from under us. So we are done. */ + putback_active_hugepage(hpage); + return MIGRATEPAGE_SUCCESS; + } + new_hpage = get_new_page(hpage, private); if (!new_hpage) return -ENOMEM; --2.11.0-- Michal Hocko SUSE Labs