Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > On Thu, Feb 09, 2023 at 10:29:43AM +0000, David Howells wrote: > > + npages = alloc_pages_bulk_list(GFP_USER, npages, &pages); > > Please don't use alloc_pages_bulk_list(). If nobody uses it, it can go > away again soon. Does alloc_pages_bulk_array() work for you? It's > faster. Sure. > > + /* Free any pages that didn't get touched at all. */ > > + for (; reclaim >= PAGE_SIZE; reclaim -= PAGE_SIZE) > > + __free_page(bv[--npages].bv_page); > > If you have that array, you can then use release_pages() to free > them, which will be faster. Um. I would normally overlay the array on end of the bvec[] so that I could save on an allocation (I have to fill in the bvec[] anyway) - which means I wouldn't still have the array at release time. But in this case I can make an exception, though I would've thought that the expectation would be that all the requested data would be fetched. David