Merge tag 'for-5.19-rc3-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave...
[sfrench/cifs-2.6.git] / fs / btrfs / inode.c
index ba527da61732785196fabb9f4bf16f6b709b17b8..05e0c4a5affda0268cbce2260ff84998d862266e 100644 (file)
@@ -4811,7 +4811,7 @@ again:
                goto out_unlock;
 
        if (!PageUptodate(page)) {
-               ret = btrfs_readpage(NULL, page);
+               ret = btrfs_read_folio(NULL, page_folio(page));
                lock_page(page);
                if (page->mapping != mapping) {
                        unlock_page(page);
@@ -8206,7 +8206,7 @@ static void btrfs_readahead(struct readahead_control *rac)
 }
 
 /*
- * For releasepage() and invalidate_folio() we have a race window where
+ * For release_folio() and invalidate_folio() we have a race window where
  * folio_end_writeback() is called but the subpage spinlock is not yet released.
  * If we continue to release/invalidate the page, we could cause use-after-free
  * for subpage spinlock.  So this function is to spin and wait for subpage
@@ -8238,22 +8238,22 @@ static void wait_subpage_spinlock(struct page *page)
        spin_unlock_irq(&subpage->lock);
 }
 
-static int __btrfs_releasepage(struct page *page, gfp_t gfp_flags)
+static bool __btrfs_release_folio(struct folio *folio, gfp_t gfp_flags)
 {
-       int ret = try_release_extent_mapping(page, gfp_flags);
+       int ret = try_release_extent_mapping(&folio->page, gfp_flags);
 
        if (ret == 1) {
-               wait_subpage_spinlock(page);
-               clear_page_extent_mapped(page);
+               wait_subpage_spinlock(&folio->page);
+               clear_page_extent_mapped(&folio->page);
        }
        return ret;
 }
 
-static int btrfs_releasepage(struct page *page, gfp_t gfp_flags)
+static bool btrfs_release_folio(struct folio *folio, gfp_t gfp_flags)
 {
-       if (PageWriteback(page) || PageDirty(page))
-               return 0;
-       return __btrfs_releasepage(page, gfp_flags);
+       if (folio_test_writeback(folio) || folio_test_dirty(folio))
+               return false;
+       return __btrfs_release_folio(folio, gfp_flags);
 }
 
 #ifdef CONFIG_MIGRATION
@@ -8324,7 +8324,7 @@ static void btrfs_invalidate_folio(struct folio *folio, size_t offset,
         * still safe to wait for ordered extent to finish.
         */
        if (!(offset == 0 && length == folio_size(folio))) {
-               btrfs_releasepage(&folio->page, GFP_NOFS);
+               btrfs_release_folio(folio, GFP_NOFS);
                return;
        }
 
@@ -8448,7 +8448,7 @@ next:
        ASSERT(!folio_test_ordered(folio));
        btrfs_page_clear_checked(fs_info, &folio->page, folio_pos(folio), folio_size(folio));
        if (!inode_evicting)
-               __btrfs_releasepage(&folio->page, GFP_NOFS);
+               __btrfs_release_folio(folio, GFP_NOFS);
        clear_page_extent_mapped(&folio->page);
 }
 
@@ -11418,13 +11418,13 @@ static const struct file_operations btrfs_dir_file_operations = {
  * For now we're avoiding this by dropping bmap.
  */
 static const struct address_space_operations btrfs_aops = {
-       .readpage       = btrfs_readpage,
+       .read_folio     = btrfs_read_folio,
        .writepage      = btrfs_writepage,
        .writepages     = btrfs_writepages,
        .readahead      = btrfs_readahead,
        .direct_IO      = noop_direct_IO,
        .invalidate_folio = btrfs_invalidate_folio,
-       .releasepage    = btrfs_releasepage,
+       .release_folio  = btrfs_release_folio,
 #ifdef CONFIG_MIGRATION
        .migratepage    = btrfs_migratepage,
 #endif