The quilt patch titled Subject: readahead: correct the start and size in ondemand_readahead() has been removed from the -mm tree. Its filename was readahead-correct-the-start-and-size-in-ondemand_readahead.patch This patch was dropped because it is obsolete ------------------------------------------------------ From: Yin Fengwei <fengwei.yin@xxxxxxxxx> Subject: readahead: correct the start and size in ondemand_readahead() Date: Wed, 28 Jun 2023 12:43:03 +0800 Commit 9425c591e06a ("page cache: fix page_cache_next/prev_miss off by one") updated the page_cache_next_miss() to return the index beyond range. But it breaks the start/size of ra in ondemand_readahead() because the offset by one is accumulated to readahead_index. As a consequence, not best readahead order is picked. Tracing of the order parameter of filemap_alloc_folio() showed: page order : count distribution 0 : 892073 | | 1 : 0 | | 2 : 65120457 |****************************************| 3 : 32914005 |******************** | 4 : 33020991 |******************** | with 9425c591e06a9. With parent commit: page order : count distribution 0 : 3417288 |**** | 1 : 0 | | 2 : 877012 |* | 3 : 288 | | 4 : 5607522 |******* | 5 : 29974228 |****************************************| Fix the issue by removing the offset by one when page_cache_next_miss() returns no gaps in the range. After the fix: page order : count distribution 0 : 2598561 |*** | 1 : 0 | | 2 : 687739 | | 3 : 288 | | 4 : 207210 | | 5 : 32628260 |****************************************| Link: https://lkml.kernel.org/r/20230628044303.1412624-1-fengwei.yin@xxxxxxxxx Fixes: 9425c591e06a ("page cache: fix page_cache_next/prev_miss off by one") Reported-by: kernel test robot <oliver.sang@xxxxxxxxx> Closes: https://lore.kernel.org/oe-lkp/202306211346.1e9ff03e-oliver.sang@xxxxxxxxx Signed-off-by: Yin Fengwei <fengwei.yin@xxxxxxxxx> Cc: Ackerley Tng <ackerleytng@xxxxxxxxxx> Cc: Matthew Wilcox <willy@xxxxxxxxxxxxx> Cc: Mike Kravetz <mike.kravetz@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/readahead.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) --- a/mm/readahead.c~readahead-correct-the-start-and-size-in-ondemand_readahead +++ a/mm/readahead.c @@ -613,9 +613,17 @@ static void ondemand_readahead(struct re max_pages); rcu_read_unlock(); - if (!start || start - index > max_pages) + if (!start || start - index - 1 > max_pages) return; + /* + * If no gaps in the range, page_cache_next_miss() returns + * index beyond range. Adjust it back to make sure + * ractl->_index is updated correctly later. + */ + if ((start - index - 1) == max_pages) + start--; + ra->start = start; ra->size = start - index; /* old async_size */ ra->size += req_size; _ Patches currently in -mm which might be from fengwei.yin@xxxxxxxxx are