Re: [PATCH 2/4] mm/huge_memory: move to next folio after folio_split() succeeds.

From: Zi Yan
Date: Fri Aug 08 2025 - 11:27:19 EST


On 7 Aug 2025, at 23:15, Wei Yang wrote:

> 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.

Got it. addr should be aligned up to PAGE_SIZE * nr_pages to get to the next
folio. Thanks.

--
Best Regards,
Yan, Zi