On Tue, Jun 28, 2022 at 05:31:20PM +1000, Dave Chinner wrote: > So using this technique, I've discovered that there's a dirty page > accounting leak that eventually results in fsx hanging in > balance_dirty_pages(). Alas, I think this is only an accounting error, and not related to the problem(s) that Darrick & Zorro are seeing. I think what you're seeing is dirty pages being dropped at truncation without the appropriate accounting. ie this should be the fix: +++ b/mm/huge_memory.c @@ -2443,6 +2443,8 @@ static void __split_huge_page(struct page *page, struct list_head *list, __delete_from_page_cache(head + i, NULL); if (shmem_mapping(head->mapping)) shmem_uncharge(head->mapping->host, 1); + else + folio_account_cleaned(page_folio(head + i)); put_page(head + i); } else if (!PageAnon(page)) { __xa_store(&head->mapping->i_pages, head[i].index,