Merge tag 'folio-6.0' of git://git.infradead.org/users/willy/pagecache
[linux-2.6-microblaze.git] / fs / ext4 / inode.c
index 3dcc1dd..9fd60fc 100644 (file)
@@ -1554,9 +1554,9 @@ struct mpage_da_data {
 static void mpage_release_unused_pages(struct mpage_da_data *mpd,
                                       bool invalidate)
 {
-       int nr_pages, i;
+       unsigned nr, i;
        pgoff_t index, end;
-       struct pagevec pvec;
+       struct folio_batch fbatch;
        struct inode *inode = mpd->inode;
        struct address_space *mapping = inode->i_mapping;
 
@@ -1574,15 +1574,18 @@ static void mpage_release_unused_pages(struct mpage_da_data *mpd,
                ext4_es_remove_extent(inode, start, last - start + 1);
        }
 
-       pagevec_init(&pvec);
+       folio_batch_init(&fbatch);
        while (index <= end) {
-               nr_pages = pagevec_lookup_range(&pvec, mapping, &index, end);
-               if (nr_pages == 0)
+               nr = filemap_get_folios(mapping, &index, end, &fbatch);
+               if (nr == 0)
                        break;
-               for (i = 0; i < nr_pages; i++) {
-                       struct page *page = pvec.pages[i];
-                       struct folio *folio = page_folio(page);
+               for (i = 0; i < nr; i++) {
+                       struct folio *folio = fbatch.folios[i];
 
+                       if (folio->index < mpd->first_page)
+                               continue;
+                       if (folio->index + folio_nr_pages(folio) - 1 > end)
+                               continue;
                        BUG_ON(!folio_test_locked(folio));
                        BUG_ON(folio_test_writeback(folio));
                        if (invalidate) {
@@ -1594,7 +1597,7 @@ static void mpage_release_unused_pages(struct mpage_da_data *mpd,
                        }
                        folio_unlock(folio);
                }
-               pagevec_release(&pvec);
+               folio_batch_release(&fbatch);
        }
 }
 
@@ -2311,8 +2314,8 @@ out:
  */
 static int mpage_map_and_submit_buffers(struct mpage_da_data *mpd)
 {
-       struct pagevec pvec;
-       int nr_pages, i;
+       struct folio_batch fbatch;
+       unsigned nr, i;
        struct inode *inode = mpd->inode;
        int bpp_bits = PAGE_SHIFT - inode->i_blkbits;
        pgoff_t start, end;
@@ -2326,14 +2329,13 @@ static int mpage_map_and_submit_buffers(struct mpage_da_data *mpd)
        lblk = start << bpp_bits;
        pblock = mpd->map.m_pblk;
 
-       pagevec_init(&pvec);
+       folio_batch_init(&fbatch);
        while (start <= end) {
-               nr_pages = pagevec_lookup_range(&pvec, inode->i_mapping,
-                                               &start, end);
-               if (nr_pages == 0)
+               nr = filemap_get_folios(inode->i_mapping, &start, end, &fbatch);
+               if (nr == 0)
                        break;
-               for (i = 0; i < nr_pages; i++) {
-                       struct page *page = pvec.pages[i];
+               for (i = 0; i < nr; i++) {
+                       struct page *page = &fbatch.folios[i]->page;
 
                        err = mpage_process_page(mpd, page, &lblk, &pblock,
                                                 &map_bh);
@@ -2349,14 +2351,14 @@ static int mpage_map_and_submit_buffers(struct mpage_da_data *mpd)
                        if (err < 0)
                                goto out;
                }
-               pagevec_release(&pvec);
+               folio_batch_release(&fbatch);
        }
        /* Extent fully mapped and matches with page boundary. We are done. */
        mpd->map.m_len = 0;
        mpd->map.m_flags = 0;
        return 0;
 out:
-       pagevec_release(&pvec);
+       folio_batch_release(&fbatch);
        return err;
 }
 
@@ -3631,7 +3633,7 @@ static const struct address_space_operations ext4_aops = {
        .invalidate_folio       = ext4_invalidate_folio,
        .release_folio          = ext4_release_folio,
        .direct_IO              = noop_direct_IO,
-       .migratepage            = buffer_migrate_page,
+       .migrate_folio          = buffer_migrate_folio,
        .is_partially_uptodate  = block_is_partially_uptodate,
        .error_remove_page      = generic_error_remove_page,
        .swap_activate          = ext4_iomap_swap_activate,
@@ -3666,7 +3668,7 @@ static const struct address_space_operations ext4_da_aops = {
        .invalidate_folio       = ext4_invalidate_folio,
        .release_folio          = ext4_release_folio,
        .direct_IO              = noop_direct_IO,
-       .migratepage            = buffer_migrate_page,
+       .migrate_folio          = buffer_migrate_folio,
        .is_partially_uptodate  = block_is_partially_uptodate,
        .error_remove_page      = generic_error_remove_page,
        .swap_activate          = ext4_iomap_swap_activate,