On Tue, Aug 30, 2022 at 09:18:42PM -0700, John Hubbard wrote: static void nfs_direct_release_pages(struct iov_iter *iter, struct page **pages, unsigned int npages) > { > - unsigned int i; > - for (i = 0; i < npages; i++) > - put_page(pages[i]); > + if (user_backed_iter(iter) || iov_iter_is_bvec(iter)) > + dio_w_unpin_user_pages(pages, npages); > + else > + release_pages(pages, npages); Instead of having this magic in all kinds of places, we need a helper that takes the page array, npages and iter->type and does the right thing.