On Sat, Mar 29, 2025 at 11:47:30PM -0700, Luis Chamberlain wrote:
However tracing shows that folio_mc_copy() *isn't* being called
as often as we'd expect from buffer_migrate_folio_norefs() path
as we're likely bailing early now thanks to the check added by commit
060913999d7a ("mm: migrate: support poisoned recover from migrate
folio").
Umm. You're saying that most folios we try to migrate have extra refs?
That seems unexpected; does it indicate a bug in 060913999d7a?
quoted hunk ↗ jump to hunk
+++ b/mm/migrate.c
@@ -751,6 +751,8 @@ static int __migrate_folio(struct address_space *mapping, struct folio *dst,
{
int rc, expected_count = folio_expected_refs(mapping, src);
+ might_sleep();
We deliberately don't sleep when the folio is only a single page.
So this needs to be:
might_sleep_if(folio_test_large(folio));
/* Check whether src does not have extra refs before we do more work */
if (folio_ref_count(src) != expected_count)
return -EAGAIN;
--
2.47.2