On Sat, 26 Dec 2020, Kirill A. Shutemov wrote: > On Sat, Dec 26, 2020 at 09:57:13AM -0800, Linus Torvalds wrote: > > Because not only does that get rid of the "if (page)" test, I think it > > would make things a bit clearer. When I read the patch first, the > > initial "next_page()" call confused me. > > Agreed. Here we go: > > From d12dea4abe94dbc24b7945329b191ad7d29e213a Mon Sep 17 00:00:00 2001 > From: "Kirill A. Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx> > Date: Sat, 19 Dec 2020 15:19:23 +0300 > Subject: [PATCH] mm: Cleanup faultaround and finish_fault() codepaths > > alloc_set_pte() has two users with different requirements: in the > faultaround code, it called from an atomic context and PTE page table > has to be preallocated. finish_fault() can sleep and allocate page table > as needed. > > PTL locking rules are also strange, hard to follow and overkill for > finish_fault(). > > Let's untangle the mess. alloc_set_pte() has gone now. All locking is > explicit. > > The price is some code duplication to handle huge pages in faultaround > path, but it should be fine, having overall improvement in readability. > > Signed-off-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> Hold on. I guess this one will suffer from the same bug as the previous. I was about to report back, after satisfactory overnight testing of that version - provided that one big little bug is fixed: --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2919,7 +2919,7 @@ static bool filemap_map_pmd(struct vm_fa if (pmd_none(*vmf->pmd) && PageTransHuge(page) && - do_set_pmd(vmf, page)) { + do_set_pmd(vmf, page) == 0) { unlock_page(page); return true; } (Yes, you can write that as !do_set_pmd(vmf, page), and maybe I'm odd, but even though it's very common, I have a personal aversion to using "!' on a positive-sounding function that returns 0 for success.) I'll give the new patch a try now, but with that fix added in. Without it, I got "Bad page" on compound_mapcount on file THP pages - but I run with a BUG() inside of bad_page() so I cannot miss them: I did not look to see what the eventual crash or page leak would look like without that. Hugh