Re: [PATCH v2 16/25] iomap: Support large pages in read paths

From: Matthew Wilcox
Date: Wed Feb 12 2020 - 12:45:24 EST


On Wed, Feb 12, 2020 at 12:13:40AM -0800, Christoph Hellwig wrote:
> > +/*
> > + * Estimate the number of vectors we need based on the current page size;
> > + * if we're wrong we'll end up doing an overly large allocation or needing
> > + * to do a second allocation, neither of which is a big deal.
> > + */
> > +static unsigned int iomap_nr_vecs(struct page *page, loff_t length)
> > +{
> > + return (length + thp_size(page) - 1) >> page_shift(page);
> > +}
>
> With the multipage bvecs a huge page (or any physically contigous piece
> of memory) will always use one or less (if merged into the previous)
> bio_vec. So this can be simplified and optimized.

Oh, hm, right. So what you really want here is for me to pass in the
number of thp pages allocated by the readahead operation. rac->nr_pages
is the number of PAGE_SIZE pages, but we could have an rac->nr_segs
element as well.