On Mon, 29 Jul 2024 09:58:02 +0800 Gao Xiang <hsiangkao@xxxxxxxxxxxxxxxxx> wrote: > > For the fix, I think that we should still respect migrate_mode because > > users may prefer migration success over blocking. > > > > @@ -1492,11 +1492,17 @@ static int unmap_and_move_huge_page(new_folio_t get_new_folio, > > return rc; > > } > > > > -static inline int try_split_folio(struct folio *folio, struct list_head *split_folios) > > +static inline int try_split_folio(struct folio *folio, struct list_head *split_folios, > > + enum migrate_mode mode) > > { > > int rc; > > > > - folio_lock(folio); > > + if (mode == MIGRATE_ASYNC) { > > + if (!folio_trylock(folio)) > > + return -EAGAIN; > > + } else { > > + folio_lock(folio); > > + } > > rc = split_folio_to_list(folio, split_folios); > > folio_unlock(folio); > > if (!rc) > > Okay, yeah it looks better since it seems I missed the fallback > part in migrate_pages_sync(). > > Let me send the next version to follow your advice, thanks. The author seems to have disappeared. Should we merge this as-is or does someone want to take a look at developing a v2? Thanks.