> > >> But this means that the page is not isolated and so it could be reused > > >> for something else. No? > > > > > > The page is in a movable zone, has zero references, and the section is > > > isolated (i.e. set_pageblock_migratetype(page, MIGRATE_ISOLATE);) is > > > set. The page should be offlinable, but it is lost in a pcp list as > > > that list is never drained again after the first failure to migrate > > > all pages in the range. > > > > Yeah. To answer Michal's "it could be reused for something else" - yes, somebody > > could allocate it from the pcplist before we do the extra drain. But then it > > becomes "visible again" and the loop in __offline_pages() should catch it by > > scan_movable_pages() - do_migrate_range(). And this time the pageblock is > > already marked as isolated, so the page (freed by migration) won't end up on the > > pcplist again. > > So the page block is marked MIGRATE_ISOLATE but the allocation itself > could be used for non migrateable objects. Or does anything prevent that > from happening? Vlastimil is right, we could allocate from pcplist, if someone requests allocation, nothing from what I can tell prevents that, and we will immediately migrate that page in do_migrate_range(). > We really do depend on isolation to not allow reuse when offlining. Once a page is isolated it is not re-used but here this page is not isolated because of the race between adding to pcp and isolation. Draining the second time on a failure fixes the race. Pasha