Messages in this thread | | | From | Pavel Tatashin <> | Date | Wed, 2 Sep 2020 11:40:53 -0400 | Subject | Re: [PATCH] mm/memory_hotplug: drain per-cpu pages again during memory offline |
| |
> > >> 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
| |