On 3/17/21 3:59 PM, Michal Hocko wrote: > On Wed 17-03-21 15:38:35, Oscar Salvador wrote: >> On Wed, Mar 17, 2021 at 03:12:29PM +0100, Michal Hocko wrote: >> > > Since isolate_migratepages_block will stop returning the next pfn to be >> > > scanned, we reuse the cc->migrate_pfn field to keep track of that. >> > >> > This looks hakish and I cannot really tell that users of cc->migrate_pfn >> > work as intended. We did check those in detail. Of course it's possible to overlook something... The alloc_contig_range user never cared about cc->migrate_pfn. compaction (isolate_migratepages() -> isolate_migratepages_block()) did, and isolate_migratepages_block() returned the pfn only to be assigned to cc->migrate_pfn in isolate_migratepages(). I think it's now better that isolate_migratepages_block() sets it. >> When discussing this with Vlastimil, I came up with the idea of adding a new >> field in compact_control struct, e.g: next_pfn_scan to keep track of the next >> pfn to be scanned. >> >> But Vlastimil made me realize that since cc->migrate_pfn points to that aleady, >> so we do not need any extra field. Yes, the first patch had at asome point: /* Record where migration scanner will be restarted. */ cc->migrate_pfn = cc->the_new_field; Which was a clear sign that the new field is unnecessary. > This deserves a big fat comment. Comment where, saying what? :)