[PATCH 09/26] mm: Make readahead store folio count in readahead_control
David Howells <[email protected]> Thu, 26 Mar 2026 10:45:24 +0000
| Newsgroups | dev.linux.lists.v9fs,dev.linux.lists.netfs,org.kernel.vger.ceph-devel,org.kernel.vger.linux-cifs,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-nfs,org.kvack.linux-mm,org.ozlabs.lists.linux-erofs |
|---|---|
| Message-ID | <[email protected]> |
Make readahead store folio count in readahead_control so that the filesystem can know in advance how many folios it needs to keep track of. Signed-off-by: David Howells <[email protected]> cc: Paulo Alcantara <[email protected]> cc: Matthew Wilcox <[email protected]> cc: [email protected] cc: [email protected] cc: [email protected] --- include/linux/pagemap.h | 1 + mm/readahead.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index ec442af3f886..3c3e34e5fe8a 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -1361,6 +1361,7 @@ struct readahead_control { struct file_ra_state *ra; /* private: use the readahead_* accessors instead */ pgoff_t _index; + unsigned int _nr_folios; unsigned int _nr_pages; unsigned int _batch_count; bool dropbehind; diff --git a/mm/readahead.c b/mm/readahead.c index 7b05082c89ea..53134c9d9fe9 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -292,6 +292,7 @@ void page_cache_ra_unbounded(struct readahead_control *ractl, if (i == mark) folio_set_readahead(folio); ractl->_workingset |= folio_test_workingset(folio); + ractl->_nr_folios++; ractl->_nr_pages += min_nrpages; i += min_nrpages; } @@ -459,6 +460,7 @@ static inline int ra_alloc_folio(struct readahead_control *ractl, pgoff_t index, return err; } + ractl->_nr_folios++; ractl->_nr_pages += 1UL << order; ractl->_workingset |= folio_test_workingset(folio); return 0; @@ -802,6 +804,7 @@ void readahead_expand(struct readahead_control *ractl, ractl->_workingset = true; psi_memstall_enter(&ractl->_pflags); } + ractl->_nr_folios++; ractl->_nr_pages += min_nrpages; ractl->_index = folio->index; } @@ -831,6 +834,7 @@ void readahead_expand(struct readahead_control *ractl, ractl->_workingset = true; psi_memstall_enter(&ractl->_pflags); } + ractl->_nr_folios++; ractl->_nr_pages += min_nrpages; if (ra) { ra->size += min_nrpages;