Re: [PATCH 3/4] infiniband/mm: convert to the new put_user_page() call

From: John Hubbard
Date: Wed Oct 03 2018 - 19:19:45 EST


On 10/3/18 9:27 AM, Jan Kara wrote:
> On Fri 28-09-18 20:12:33, John Hubbard wrote:
>> static inline void release_user_pages(struct page **pages,
>> - unsigned long npages)
>> + unsigned long npages,
>> + bool set_dirty)
>> {
>> - while (npages)
>> - put_user_page(pages[--npages]);
>> + if (set_dirty)
>> + release_user_pages_dirty(pages, npages);
>> + else
>> + release_user_pages_basic(pages, npages);
>> +}
>
> Is there a good reason to have this with set_dirty argument? Generally bool
> arguments are not great for readability (or greppability for that matter).
> Also in this case callers can just as easily do:
> if (set_dirty)
> release_user_pages_dirty(...);
> else
> release_user_pages(...);
>
> And furthermore it makes the code author think more whether he needs
> set_page_dirty() or set_page_dirty_lock(), rather than just passing 'true'
> and hoping the function magically does the right thing for him.
>

Ha, I went through *precisely* that argument in my head, too--and then
got seduced with the idea that it pretties up the existing calling code,
because it's a drop-in one-liner at the call sites. But yes, I'll change it
back to omit the bool set_dirty argument.

thanks,
--
John Hubbard
NVIDIA