Re: madvise_inject_error skips pages

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2024/7/17 5:33, Jane Chu wrote:
> Hi, Matthew,
> 
> On 7/16/2024 8:12 AM, Matthew Wilcox wrote:
>> I was going to send this patch:
>>
>> +++ b/mm/madvise.c
>> @@ -1136,9 +1136,10 @@ static int madvise_inject_error(int behavior,
>>                  /*
>>                   * When soft offlining hugepages, after migrating the page
>>                   * we dissolve it, therefore in the second loop "page" will
>> -                * no longer be a compound page.
>> +                * no longer be part of a large folio.
>>                   */
>> -               size = page_size(compound_head(page));
>> +               size = folio_size(page_folio(page));
>> +               start = start & ~(size - 1);
>>
>>                  if (behavior == MADV_SOFT_OFFLINE) {
>>                          pr_info("Soft offlining pfn %#lx at process virtual address %#lx\n",
>>
>> because right now if you start in the middle of (e.g.) an order-4 folio
>> followed by an order-0 folio, you'll skip the order-0 folio immediately
>> following it.
>>
>> But then I realised that we can come to this path in the middle of
>> a large file-backed folio that's mapped misaligned and has a COW page
>> in the middle, and the whole thing is just misguided.  So I gave up.
>> Anyone want to take a crack at fixing & testing this?
> 
> Thanks for the report.

Thanks both for your thoughts.

> 
> My understanding is, we should run folio_test_large() upfront, and treat both ends as special case
> 
> unless they're folio_size aligned, and iterate in folio_size for the middle.   I think this should work for
> 
> hugetlb and large folio in general, but I need to confirm this with tests.
> 
> Any thoughts?

I might be wrong but there might be some corner cases even if they're folio_size aligned.
For example, if pte[0] points to a pte mapped thp and pte[1..n] are cowed pages, these cowed
pages might be skipped in next loop because folio_size covers them but they doesn't belong to
this thp? Will it be better to decide @size upon pte entry?

Thanks.
.




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux