On Fri 29-12-17 10:45:46, Zi Yan wrote: > On 29 Dec 2017, at 6:36, Michal Hocko wrote: > > > On Tue 26-12-17 21:19:35, Zi Yan wrote: [...] > >> And it seems a little bit strange to only re-migrate the head page, then come back to all tail > >> pages after migrating the rest of pages in the list “from”. Is it better to split the THP into > >> a list other than “from” and insert the list after “page”, then retry from the split “page”? > >> Thus, we attempt to migrate all sub pages of the THP after it is split. > > > > Why does this matter? > > Functionally, it does not matter. > > This behavior is just less intuitive and a little different from current one, > which implicitly preserves its original order of the not-migrated pages > in the “from” list, although no one relies on this implicit behavior now. > > > Adding one line comment about this difference would be good for code maintenance. :) OK, I will not argue. I still do not see _why_ we need it but I've added the following. diff --git a/mm/migrate.c b/mm/migrate.c index 21b3381a2871..0ac5185d3949 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1395,6 +1395,11 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page, * allocation could've failed so we should * retry on the same page with the THP split * to base pages. + * + * Head page is retried immediatelly and tail + * pages are added to the tail of the list so + * we encounter them after the rest of the list + * is processed. */ if (PageTransHuge(page)) { lock_page(page); Does that this reflect what you mean? > Reviewed-by: Zi Yan <zi.yan@xxxxxxxxxxxxxx> Thx! -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>