--- x/mm/migrate.c +++ y/mm/migrate.c @@ -1137,6 +1137,9 @@ static int migrate_folio_unmap(new_page_ dst->private = NULL; +again: + rc = -EAGAIN; + locked = false; if (!folio_trylock(src)) { if (!force || mode == MIGRATE_ASYNC) goto out; @@ -1189,7 +1192,9 @@ static int migrate_folio_unmap(new_page_ } if (!force) goto out; + folio_unlock(src); folio_wait_writeback(src); + goto again; } /*