Hi Neil, On Mon, Jan 24, 2022 at 5:49 PM NeilBrown <neilb@xxxxxxx> wrote: > swap_readpage() is given one page at a time, but maybe called repeatedly > in succession. > For block-device swapspace, the blk_plug functionality allows the > multiple pages to be combined together at lower layers. > That cannot be used for SWP_FS_OPS as blk_plug may not exist - it is > only active when CONFIG_BLOCK=y. Consequently all swap reads over NFS > are single page reads. > > With this patch we pass in a pointer-to-pointer when swap_readpage can > store state between calls - much like the effect of blk_plug. After > calling swap_readpage() some number of times, the state will be passed > to swap_read_unplug() which can submit the combined request. > > Some caller currently call blk_finish_plug() *before* the final call to > swap_readpage(), so the last page cannot be included. This patch moves > blk_finish_plug() to after the last call, and calls swap_read_unplug() > there too. > > Signed-off-by: NeilBrown <neilb@xxxxxxx> Thanks for your patch! > --- a/mm/swap.h > +++ b/mm/swap.h > @@ -53,7 +62,8 @@ static inline unsigned int page_swap_flags(struct page *page) > return page_swap_info(page)->flags; > } > #else /* CONFIG_SWAP */ > -static inline int swap_readpage(struct page *page, bool do_poll) > +static inline int swap_readpage(struct page *page, bool do_poll, > + struct swap_iocb **plug); Bogus semicolon. > { > return 0; > } Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds