Re: [PATCH v1 06/11] mm: support GUP-triggered unsharing via FAULT_FLAG_UNSHARE (!hugetlb)

From: Matthew Wilcox
Date: Sun Dec 19 2021 - 17:26:29 EST


On Sun, Dec 19, 2021 at 02:12:04PM -0800, Linus Torvalds wrote:
> On Sun, Dec 19, 2021 at 2:02 PM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote:
> >
> > I'd like to get rid of ->mapcount for file pages too. And those are
> > definitely never mapped in the majority of cases.
>
> Fair enough.
>
> You'd probably be better off checking "is this mapping mapped" though.
> Because otherwise you have to get the page lock to serialize each
> page.

Truncate already has the page locked, eg
truncate_inode_pages_range()
find_lock_entries()
truncate_cleanup_page()
if (page_mapped(page))
unmap_mapping_page(page)

I think anyone calling unmap_mapping_page() really ought to have the
page lock. Oh, we actually have an assert already to that effect ;-)
VM_BUG_ON(!PageLocked(page));