On Thu, Jan 12, 2023 at 09:15:50PM +0000, Al Viro wrote: > On Wed, Jan 11, 2023 at 02:28:05PM +0000, David Howells wrote: > > > +ssize_t iov_iter_extract_pages(struct iov_iter *i, > > + struct page ***pages, > > + size_t maxsize, > > + unsigned int maxpages, > > + unsigned int gup_flags, > > + size_t *offset0, > > + unsigned int *cleanup_mode) > > This cleanup_mode thing is wrong. It's literally a trivial > function of ->user_backed and ->data_source - we don't > even need to look at the ->type. > > Separate it into an inline helper and be done with that; > don't carry it all over the place. > > It's really "if not user-backed => 0, otherwise it's FOLL_PIN or FOLL_GET, > depending upon the direction". Seriously, it would be easier to follow that way; if you really insist upon keeping these calling conventions, at least put the calculation in one place - don't make readers to chase down into every sodding helper to check if they do what you'd expect them to do.