diff options
| author | Andrew Morton <akpm@linux-foundation.org> | 2024-07-06 11:44:41 -0700 |
|---|---|---|
| committer | Andrew Morton <akpm@linux-foundation.org> | 2024-07-06 11:44:41 -0700 |
| commit | 8ef6fd0e9ea83a792ba53882ddc6e0d38ce0d636 (patch) | |
| tree | b119eaeb76c7afb8672d30078ab7061cb7be67fb /mm/migrate.c | |
| parent | 44195d1eba826a8af0afbcfa69ab4cc26f6ead7f (diff) | |
| parent | 1e3d28fe03cdac1f58402e4da1e1e59fb70d145f (diff) | |
| download | linux-8ef6fd0e9ea83a792ba53882ddc6e0d38ce0d636.tar.gz linux-8ef6fd0e9ea83a792ba53882ddc6e0d38ce0d636.tar.bz2 linux-8ef6fd0e9ea83a792ba53882ddc6e0d38ce0d636.zip | |
Merge branch 'mm-hotfixes-stable' into mm-stable to pick up "mm: fix
crashes from deferred split racing folio migration", needed by "mm:
migrate: split folio_migrate_mapping()".
Diffstat (limited to 'mm/migrate.c')
| -rw-r--r-- | mm/migrate.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/mm/migrate.c b/mm/migrate.c index e3eb22595ced..9a1c5b4a3f99 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -415,6 +415,15 @@ int folio_migrate_mapping(struct address_space *mapping, if (folio_ref_count(folio) != expected_count) return -EAGAIN; + /* Take off deferred split queue while frozen and memcg set */ + if (folio_test_large(folio) && + folio_test_large_rmappable(folio)) { + if (!folio_ref_freeze(folio, expected_count)) + return -EAGAIN; + folio_undo_large_rmappable(folio); + folio_ref_unfreeze(folio, expected_count); + } + /* No turning back from here */ newfolio->index = folio->index; newfolio->mapping = folio->mapping; @@ -433,6 +442,10 @@ int folio_migrate_mapping(struct address_space *mapping, return -EAGAIN; } + /* Take off deferred split queue while frozen and memcg set */ + if (folio_test_large(folio) && folio_test_large_rmappable(folio)) + folio_undo_large_rmappable(folio); + /* * Now we know that no one else is looking at the folio: * no turning back from here. |
