On 12 Jan 2022, at 6:01, David Hildenbrand wrote: > On 05.01.22 22:47, Zi Yan wrote: >> From: Zi Yan <ziy@xxxxxxxxxx> >> >> In isolate_migratepages_block(), a !PageLRU tail page can be encountered >> when the page is larger than a pageblock. Use compound head page for the >> checks inside and skip the entire compound page when isolation succeeds. >> > > This will currently never happen, due to the way we always isolate > MAX_ORDER -1 ranges, correct? You are right. > > Better note that in the patch description, because currently it reads > like it's an actual fix "can be encountered". > Will do. This is a preparation patch for the upcoming commits. >> Signed-off-by: Zi Yan <ziy@xxxxxxxxxx> >> --- >> mm/compaction.c | 10 +++++++--- >> 1 file changed, 7 insertions(+), 3 deletions(-) >> >> diff --git a/mm/compaction.c b/mm/compaction.c >> index b4e94cda3019..ad9053fbbe06 100644 >> --- a/mm/compaction.c >> +++ b/mm/compaction.c >> @@ -979,19 +979,23 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, >> * Skip any other type of page >> */ >> if (!PageLRU(page)) { >> + struct page *head = compound_head(page); >> /* >> * __PageMovable can return false positive so we need >> * to verify it under page_lock. >> */ >> - if (unlikely(__PageMovable(page)) && >> - !PageIsolated(page)) { >> + if (unlikely(__PageMovable(head)) && >> + !PageIsolated(head)) { >> if (locked) { >> unlock_page_lruvec_irqrestore(locked, flags); >> locked = NULL; >> } >> >> - if (!isolate_movable_page(page, isolate_mode)) >> + if (!isolate_movable_page(head, isolate_mode)) { >> + low_pfn += (1 << compound_order(head)) - 1 - (page - head); >> + page = head; >> goto isolate_success; >> + } >> } >> >> goto isolate_fail; > > > -- > Thanks, > > David / dhildenb -- Best Regards, Yan, Zi
Attachment:
signature.asc
Description: OpenPGP digital signature