filemap: Convert find_get_pages_contig to folios
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Sat, 6 Mar 2021 21:38:38 +0000 (16:38 -0500)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Tue, 4 Jan 2022 18:15:33 +0000 (13:15 -0500)
None of the callers of find_get_pages_contig() want tail pages.  They all
use order-0 pages today, but if they were converted, they'd want folios.
So just remove the call to find_subpage() instead of replacing it with
folio_page().

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: William Kucharski <william.kucharski@oracle.com>
mm/filemap.c

index 120df74f3c7cdb63443698ba60cd2d96924b5253..33e638f1ca3421e43b711a87bbdb692db970c92c 100644 (file)
@@ -2208,36 +2208,35 @@ unsigned find_get_pages_contig(struct address_space *mapping, pgoff_t index,
                               unsigned int nr_pages, struct page **pages)
 {
        XA_STATE(xas, &mapping->i_pages, index);
-       struct page *page;
+       struct folio *folio;
        unsigned int ret = 0;
 
        if (unlikely(!nr_pages))
                return 0;
 
        rcu_read_lock();
-       for (page = xas_load(&xas); page; page = xas_next(&xas)) {
-               if (xas_retry(&xas, page))
+       for (folio = xas_load(&xas); folio; folio = xas_next(&xas)) {
+               if (xas_retry(&xas, folio))
                        continue;
                /*
                 * If the entry has been swapped out, we can stop looking.
                 * No current caller is looking for DAX entries.
                 */
-               if (xa_is_value(page))
+               if (xa_is_value(folio))
                        break;
 
-               if (!page_cache_get_speculative(page))
+               if (!folio_try_get_rcu(folio))
                        goto retry;
 
-               /* Has the page moved or been split? */
-               if (unlikely(page != xas_reload(&xas)))
+               if (unlikely(folio != xas_reload(&xas)))
                        goto put_page;
 
-               pages[ret] = find_subpage(page, xas.xa_index);
+               pages[ret] = &folio->page;
                if (++ret == nr_pages)
                        break;
                continue;
 put_page:
-               put_page(page);
+               folio_put(folio);
 retry:
                xas_reset(&xas);
        }