*
  * Even with 0 returned, the page still need extra check to make sure
  * it's really the correct page, as the caller is using
- * find_get_pages_contig(), which can race with page invalidating.
+ * filemap_get_folios_contig(), which can race with page invalidating.
  */
 int btrfs_page_start_writer_lock(const struct btrfs_fs_info *fs_info,
                struct page *page, u64 start, u32 len)
 
  */
 
 #include <linux/pagemap.h>
+#include <linux/pagevec.h>
 #include <linux/sched.h>
 #include <linux/slab.h>
 #include <linux/sizes.h>
                                       unsigned long flags)
 {
        int ret;
-       struct page *pages[16];
+       struct folio_batch fbatch;
        unsigned long index = start >> PAGE_SHIFT;
        unsigned long end_index = end >> PAGE_SHIFT;
-       unsigned long nr_pages = end_index - index + 1;
        int i;
        int count = 0;
        int loops = 0;
 
-       while (nr_pages > 0) {
-               ret = find_get_pages_contig(inode->i_mapping, index,
-                                    min_t(unsigned long, nr_pages,
-                                    ARRAY_SIZE(pages)), pages);
+       folio_batch_init(&fbatch);
+
+       while (index <= end_index) {
+               ret = filemap_get_folios_contig(inode->i_mapping, &index,
+                               end_index, &fbatch);
                for (i = 0; i < ret; i++) {
+                       struct folio *folio = fbatch.folios[i];
+
                        if (flags & PROCESS_TEST_LOCKED &&
-                           !PageLocked(pages[i]))
+                           !folio_test_locked(folio))
                                count++;
-                       if (flags & PROCESS_UNLOCK && PageLocked(pages[i]))
-                               unlock_page(pages[i]);
-                       put_page(pages[i]);
+                       if (flags & PROCESS_UNLOCK && folio_test_locked(folio))
+                               folio_unlock(folio);
                        if (flags & PROCESS_RELEASE)
-                               put_page(pages[i]);
+                               folio_put(folio);
                }
-               nr_pages -= ret;
-               index += ret;
+               folio_batch_release(&fbatch);
                cond_resched();
                loops++;
                if (loops > 100000) {
                        printk(KERN_ERR
-               "stuck in a loop, start %llu, end %llu, nr_pages %lu, ret %d\n",
-                               start, end, nr_pages, ret);
+               "stuck in a loop, start %llu, end %llu, ret %d\n",
+                               start, end, ret);
                        break;
                }
        }
+
        return count;
 }