Re: [PATCH v2 2/5] hugetlb: convert page_huge_active() HPageMigratable flag
From: Oscar Salvador <osalvador@suse.de>
Date: 2021-01-21 08:30:12
Also in:
lkml
On Tue, Jan 19, 2021 at 05:30:46PM -0800, Mike Kravetz wrote:
Use the new hugetlb page specific flag HPageMigratable to replace the page_huge_active interfaces. By it's name, page_huge_active implied that a huge page was on the active list. However, that is not really what code checking the flag wanted to know. It really wanted to determine if the huge page could be migrated. This happens when the page is actually added the page cache and/or task page table. This is the reasoning behind the name change. The VM_BUG_ON_PAGE() calls in the *_huge_active() interfaces are not really necessary as we KNOW the page is a hugetlb page. Therefore, they are removed. The routine page_huge_active checked for PageHeadHuge before testing the active bit. This is unnecessary in the case where we hold a reference or lock and know it is a hugetlb head page. page_huge_active is also called without holding a reference or lock (scan_movable_pages), and can race with code freeing the page. The extra check in page_huge_active shortened the race window, but did not prevent the race. Offline code calling scan_movable_pages already deals with these races, so removing the check is acceptable. Add comment to racy code. Signed-off-by: Mike Kravetz <redacted>
Reviewed-by: Oscar Salvador <osalvador@suse.de>
-/*
- * Test to determine whether the hugepage is "active/in-use" (i.e. being linked
- * to hstate->hugepage_activelist.)
- *
- * This function can be called for tail pages, but never returns true for them.
- */
-bool page_huge_active(struct page *page)
-{
- return PageHeadHuge(page) && PagePrivate(&page[1]);This made me think once again. I wonder if we could ever see a scenario where page[0] is a rightful page while page[1] is poisoned/unitialized (poison_pages()). A lot of things would have to happen between the two checks, so I do not see it possible and as you mentioned earlier, the race is already there. Just wanted to speak up my mind. -- Oscar Salvador SUSE L3