On 2/6/22 22:32, Hugh Dickins wrote: > If counting page mlocks, we must not double-count: follow_page_pte() can > tell if a page has already been Mlocked or not, but cannot tell if a pte > has already been counted or not: that will have to be done when the pte > is mapped in (which lru_cache_add_inactive_or_unevictable() already tracks > for new anon pages, but there's no such tracking yet for others). > > Delete all the FOLL_MLOCK code - faulting in the missing pages will do > all that is necessary, without special mlock_vma_page() calls from here. > > But then FOLL_POPULATE turns out to serve no purpose - it was there so > that its absence would tell faultin_page() not to faultin page when > setting up VM_LOCKONFAULT areas; but if there's no special work needed > here for mlock, then there's no work at all here for VM_LOCKONFAULT. > > Have I got that right? I've not looked into the history, but see that > FOLL_POPULATE goes back before VM_LOCKONFAULT: did it serve a different > purpose before? Ah, yes, it was used to skip the old stack guard page. > > And is it intentional that COW is not broken on existing pages when > setting up a VM_LOCKONFAULT area? I can see that being argued either > way, and have no reason to disagree with current behaviour. Yeah I think it's consistent with the two usecases stated for VM_LOCKONFAULT: https://lore.kernel.org/all/1441720742-7803-1-git-send-email-emunson@xxxxxxxxxx/ > Signed-off-by: Hugh Dickins <hughd@xxxxxxxxxx> Acked-by: Vlastimil Babka <vbabka@xxxxxxx>