On Thu, Aug 07, 2025 at 01:05:09PM -0400, Zi Yan wrote:
>On 7 Aug 2025, at 4:55, Wei Yang wrote:
>
>> On Tue, Aug 05, 2025 at 10:20:43PM -0400, Zi Yan wrote:
>> [...]
>>>
>>> -           if (in_folio_offset < 0 ||
>>> -               in_folio_offset >= folio_nr_pages(folio)) {
>>> +           if (in_folio_offset < 0 || in_folio_offset >= nr_pages) {
>>>                     if (!split_folio_to_order(folio, target_order))
>>>                             split++;
>>>             } else {
>>> -                   struct page *split_at = folio_page(folio,
>>> -                                                      in_folio_offset);
>>> -                   if (!folio_split(folio, target_order, split_at, NULL))
>>> +                   struct page *split_at =
>>> +                           folio_page(folio, in_folio_offset);
>>> +                   if (!folio_split(folio, target_order, split_at, NULL)) {
>>>                             split++;
>>> +                           addr += PAGE_SIZE * nr_pages;
>>> +                   }
>>
>> Are we sure addr points to the folio start?
>
>David pointed it out. Will use addr += PAGE_SIZE * (nr_pages - 1).
>

No, let me be more clear. I am talking about the addr in next iteration. I am
talking about the addr in this round.

For an addr in the middle of 2M, we still could get the large folio if my
understanding is correct.  Then (addr + whole folio size) seems wrong.

             addr
             |
             v
      +-------------------+
      |                   |
      +-------------------+

Not sure this would be the case.

>--
>Best Regards,
>Yan, Zi

-- 
Wei Yang
Help you, Help me

Reply via email to