On Fri 02-08-19 11:12:44, Michal Hocko wrote: > On Thu 01-08-19 19:19:31, john.hubbard@xxxxxxxxx wrote: > [...] > > 2) Convert all of the call sites for get_user_pages*(), to > > invoke put_user_page*(), instead of put_page(). This involves dozens of > > call sites, and will take some time. > > How do we make sure this is the case and it will remain the case in the > future? There must be some automagic to enforce/check that. It is simply > not manageable to do it every now and then because then 3) will simply > be never safe. > > Have you considered coccinele or some other scripted way to do the > transition? I have no idea how to deal with future changes that would > break the balance though. Yeah, that's why I've been suggesting at LSF/MM that we may need to create a gup wrapper - say vaddr_pin_pages() - and track which sites dropping references got converted by using this wrapper instead of gup. The counterpart would then be more logically named as unpin_page() or whatever instead of put_user_page(). Sure this is not completely foolproof (you can create new callsite using vaddr_pin_pages() and then just drop refs using put_page()) but I suppose it would be a high enough barrier for missed conversions... Thoughts? Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR