Re: [PATCH 1/4] mm/memory-failure.c: fix race with changing page compound again
From: Mike Kravetz
Date: Fri Mar 04 2022 - 16:14:00 EST
On 3/4/22 00:26, HORIGUCHI NAOYA(堀口 直也) wrote:
> On Mon, Feb 28, 2022 at 10:02:42PM +0800, Miaohe Lin wrote:
>> There is a race window where we got the compound_head, the hugetlb page
>> could be freed to buddy, or even changed to another compound page just
>> before we try to get hwpoison page. If this happens, just bail out.
>
> I think that when some hugetlb page is about to change into other type/size
> of compound page, it has to go through buddy allocator because hugetlb pages
> are maintained in separate memory allocator and they never change into other
> normal state directly. memory_failure_hugetlb() takes refcount before
> lock_page(), so the hugetlb page seems not change between get_hwpoison_page()
> and lock_page(). So it this new check really necessary?
A hugetlb page could change size without going through buddy via the new
demote functionality [1]. Only hugetlb pages on the hugetlb free list can
be demoted.
We should not demote a page if poison is set. However, there is no check in
the demote code. IIUC, poison is set early in the memory error handling
process, even before taking ref on page. Demote code needs to be fixed so
that poisoned pages are not demoted. I can do that.
With this change in place, then I think Naoya's statement that hugetlb pages
can not change state is correct and this patch is not necessary.
Does that sound reasonable?
[1] https://lore.kernel.org/linux-mm/20211007181918.136982-1-mike.kravetz@xxxxxxxxxx/
--
Mike Kravetz