On 11/14/24 07:57, Qiang Liu wrote: > It is impossible for the situation where blockpfn > end_pfn to arise, > The if statement here is not only unnecessary, but may also lead to > a misunderstanding that blockpfn > end_pfn could potentially happen. > so these unnecessary checking code should be removed. > > Signed-off-by: Qiang Liu <liuq131@xxxxxxxxxxxxxxx> I see that's since 3da0272a4c7d ("mm/compaction: correctly return failure with bogus compound_order in strict mode") I think that commit introduced a risk of overflow due to a bogus order (which we read in a racy way), and once blockpfn overflows it will satisfy <= end_pfn and might e.g. end up scanning a completely different zone? if (blockpfn + (1UL << order) <= end_pfn) { blockpfn += (1UL << order) - 1; page += (1UL << order) - 1; nr_scanned += (1UL << order) - 1; } We should better add back the MAX_ORDER sanity check? > --- > mm/compaction.c | 6 ------ > 1 file changed, 6 deletions(-) > > diff --git a/mm/compaction.c b/mm/compaction.c > index a2b16b08cbbf..baeda7132252 100644 > --- a/mm/compaction.c > +++ b/mm/compaction.c > @@ -682,12 +682,6 @@ static unsigned long isolate_freepages_block(struct compact_control *cc, > if (locked) > spin_unlock_irqrestore(&cc->zone->lock, flags); > > - /* > - * Be careful to not go outside of the pageblock. > - */ > - if (unlikely(blockpfn > end_pfn)) > - blockpfn = end_pfn; > - > trace_mm_compaction_isolate_freepages(*start_pfn, blockpfn, > nr_scanned, total_isolated); >