On Fri, Jan 24, 2020 at 05:35:45PM -0800, Matthew Wilcox wrote:
> From: "Matthew Wilcox (Oracle)" <wi...@infradead.org>
> 
> This replaces ->readpages with a saner interface:
>  - Return the number of pages not read instead of an ignored error code.
>  - Pages are already in the page cache when ->readahead is called.
>  - Implementation looks up the pages in the page cache instead of
>    having them passed in a linked list.
....
> diff --git a/mm/readahead.c b/mm/readahead.c
> index 5a6676640f20..6d65dae6dad0 100644
> --- a/mm/readahead.c
> +++ b/mm/readahead.c
> @@ -121,7 +121,18 @@ static void read_pages(struct address_space *mapping, 
> struct file *filp,
>  
>       blk_start_plug(&plug);
>  
> -     if (mapping->a_ops->readpages) {
> +     if (mapping->a_ops->readahead) {
> +             unsigned left = mapping->a_ops->readahead(filp, mapping,
> +                             start, nr_pages);
> +
> +             while (left) {
> +                     struct page *page = readahead_page(mapping,
> +                                     start + nr_pages - left - 1);

Off by one? start = 2, nr_pages = 2, left = 1, this looks up the
page at index 2, which is the one we issued IO on, not the one we
"left behind" which is at index 3.

Cheers,

Dave.
-- 
Dave Chinner
da...@fromorbit.com


Reply via email to