filemap: convert __readahead_batch() to use a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 2 Apr 2025 21:06:08 +0000 (22:06 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 12 May 2025 00:48:06 +0000 (17:48 -0700)
Extract folios from i_mapping, not pages.  Removes a hidden call to
compound_head(), a use of thp_nr_pages() and an unnecessary assertion that
we didn't find a tail page in the page cache.

Link: https://lkml.kernel.org/r/20250402210612.2444135-7-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/pagemap.h

index 0ddd4bd8cdf828b4737c112ebce467876dfc5d14..c5c9b3770d75f914a2d99e98868145d3121d92ec 100644 (file)
@@ -1424,7 +1424,7 @@ static inline unsigned int __readahead_batch(struct readahead_control *rac,
 {
        unsigned int i = 0;
        XA_STATE(xas, &rac->mapping->i_pages, 0);
-       struct page *page;
+       struct folio *folio;
 
        BUG_ON(rac->_batch_count > rac->_nr_pages);
        rac->_nr_pages -= rac->_batch_count;
@@ -1433,13 +1433,12 @@ static inline unsigned int __readahead_batch(struct readahead_control *rac,
 
        xas_set(&xas, rac->_index);
        rcu_read_lock();
-       xas_for_each(&xas, page, rac->_index + rac->_nr_pages - 1) {
-               if (xas_retry(&xas, page))
+       xas_for_each(&xas, folio, rac->_index + rac->_nr_pages - 1) {
+               if (xas_retry(&xas, folio))
                        continue;
-               VM_BUG_ON_PAGE(!PageLocked(page), page);
-               VM_BUG_ON_PAGE(PageTail(page), page);
-               array[i++] = page;
-               rac->_batch_count += thp_nr_pages(page);
+               VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio);
+               array[i++] = folio_page(folio, 0);
+               rac->_batch_count += folio_nr_pages(folio);
                if (i == array_sz)
                        break;
        }