On Wed 13-11-19 01:02:02, John Hubbard wrote:
On 11/13/19 12:22 AM, Daniel Vetter wrote: ...
Why are we doing this? I think things got confused here someplace, as
Because:
a) These need put_page() calls, and
b) there is no put_pages() call, but there is a release_pages() call that is, arguably, what put_pages() would be.
the comment still says:
/**
- put_user_page() - release a gup-pinned page
- @page: pointer to page to be released
- Pages that were pinned via get_user_pages*() must be released via
- either put_user_page(), or one of the put_user_pages*() routines
- below.
Ohhh, I missed those comments. They need to all be changed over to say "pages that were pinned via pin_user_pages*() or pin_longterm_pages*() must be released via put_user_page*()."
The get_user_pages*() pages must still be released via put_page.
The churn is due to a fairly significant change in strategy, whis is: instead of changing all get_user_pages*() sites to call put_user_page(), change selected sites to call pin_user_pages*() or pin_longterm_pages*(), plus put_user_page().
Can't we call this unpin_user_page then, for some symmetry? Or is that even more churn?
Looking from afar the naming here seems really confusing.
That look from afar is valuable, because I'm too close to the problem to see how the naming looks. :)
unpin_user_page() sounds symmetrical. It's true that it would cause more churn (which is why I started off with a proposal that avoids changing the names of put_user_page*() APIs). But OTOH, the amount of churn is proportional to the change in direction here, and it's really only 10 or 20 lines changed, in the end.
So I'm open to changing to that naming. It would be nice to hear what others prefer, too...
FWIW I'd find unpin_user_page() also better than put_user_page() as a counterpart to pin_user_pages().
Honza