Messages in this thread | | | Date | Fri, 28 Jul 2023 12:41:04 +0200 | Subject | Re: [PATCH 1/8] mm/compaction: avoid missing last page block in section after skip offline sections | From | David Hildenbrand <> |
| |
On 28.07.23 19:10, Kemeng Shi wrote: > skip_offline_sections_reverse will return the last pfn in found online > section. Then we set block_start_pfn to start of page block which > contains the last pfn in section. Then we continue, move one page > block forward and ignore the last page block in the online section. > Make block_start_pfn point to first page block after online section to fix > this: > 1. make skip_offline_sections_reverse return end pfn of online section, > i.e. pfn of page block after online section. > 2. assign block_start_pfn with next_pfn. > > Fixes: f63224525309 ("mm: compaction: skip the memory hole rapidly when isolating free pages") > Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com> > --- > mm/compaction.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/mm/compaction.c b/mm/compaction.c > index 9b7a0a69e19f..ce7841363b12 100644 > --- a/mm/compaction.c > +++ b/mm/compaction.c
Can we add a short comment which kind of PFN we return (first pfn of first offline section after an online section)?
> @@ -259,7 +259,7 @@ static unsigned long skip_offline_sections_reverse(unsigned long start_pfn) > > while (start_nr-- > 0) { > if (online_section_nr(start_nr)) > - return section_nr_to_pfn(start_nr) + PAGES_PER_SECTION - 1; > + return section_nr_to_pfn(start_nr + 1); > } > > return 0; > @@ -1670,8 +1670,7 @@ static void isolate_freepages(struct compact_control *cc) > > next_pfn = skip_offline_sections_reverse(block_start_pfn); > if (next_pfn) > - block_start_pfn = max(pageblock_start_pfn(next_pfn), > - low_pfn); > + block_start_pfn = max(next_pfn, low_pfn);
So block_start_pfn() will now point at the first PFN of the offline section.
Confusing stuff, but I get the idea and I think it makes sense to me :)
-- Cheers,
David / dhildenb
| |