@@ -1553,9 +1557,9 @@ static __always_inline void __folio_remove_rmap(struct folio *folio, * page of the folio is unmapped and at least one page * is still mapped. */ - if (folio_test_large(folio) && folio_test_anon(folio)) - if (level == RMAP_LEVEL_PTE || nr < nr_pmdmapped) - deferred_split_folio(folio); + if (folio_test_large(folio) && folio_test_anon(folio) && + list_empty(&folio->_deferred_list) && partially_mapped) + deferred_split_folio(folio);
And now I realize that we can then even drop the folio_test_large(folio) check here!
-- Cheers, David / dhildenb