diff options
| author | Andrew Morton <akpm@linux-foundation.org> | 2025-09-21 14:19:36 -0700 |
|---|---|---|
| committer | Andrew Morton <akpm@linux-foundation.org> | 2025-09-21 14:19:36 -0700 |
| commit | bc9950b56f16e9cc53879118bfddcc175355a75a (patch) | |
| tree | 484cc703bc50a82af45288fffdf92c8a03debf27 /mm/gup.c | |
| parent | maple_tree: testing fix for spanning store on 32b (diff) | |
| parent | zram: fix slot write race condition (diff) | |
| download | linux-bc9950b56f16e9cc53879118bfddcc175355a75a.tar.gz linux-bc9950b56f16e9cc53879118bfddcc175355a75a.zip | |
Merge branch 'mm-hotfixes-stable' into mm-stable in order to pick up
changes required by mm-stable material: hugetlb and damon.
Diffstat (limited to 'mm/gup.c')
| -rw-r--r-- | mm/gup.c | 14 |
1 files changed, 11 insertions, 3 deletions
@@ -2287,8 +2287,8 @@ static unsigned long collect_longterm_unpinnable_folios( struct pages_or_folios *pofs) { unsigned long collected = 0; - bool drain_allow = true; struct folio *folio; + int drained = 0; long i = 0; for (folio = pofs_get_folio(pofs, i); folio; @@ -2307,9 +2307,17 @@ static unsigned long collect_longterm_unpinnable_folios( continue; } - if (!folio_test_lru(folio) && drain_allow) { + if (drained == 0 && folio_may_be_lru_cached(folio) && + folio_ref_count(folio) != + folio_expected_ref_count(folio) + 1) { + lru_add_drain(); + drained = 1; + } + if (drained == 1 && folio_may_be_lru_cached(folio) && + folio_ref_count(folio) != + folio_expected_ref_count(folio) + 1) { lru_add_drain_all(); - drain_allow = false; + drained = 2; } if (!folio_isolate_lru(folio)) |
