]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
fsverity: don't issue readahead for non-ENOENT errors from __filemap_get_folio
authorChristoph Hellwig <hch@lst.de>
Mon, 2 Feb 2026 06:06:30 +0000 (07:06 +0100)
committerEric Biggers <ebiggers@kernel.org>
Mon, 2 Feb 2026 19:31:21 +0000 (11:31 -0800)
Issuing more reads on errors is not a good idea, especially when the
most common error here is -ENOMEM.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20260202060754.270269-2-hch@lst.de
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
fs/verity/pagecache.c

index 01c652bc802f38a49f9877d4b777d7948ebea945..1a88decace537f79a77ce95ea71640a1d6967b59 100644 (file)
@@ -22,7 +22,8 @@ struct page *generic_read_merkle_tree_page(struct inode *inode, pgoff_t index,
        struct folio *folio;
 
        folio = __filemap_get_folio(inode->i_mapping, index, FGP_ACCESSED, 0);
-       if (IS_ERR(folio) || !folio_test_uptodate(folio)) {
+       if (folio == ERR_PTR(-ENOENT) ||
+           (!IS_ERR(folio) && !folio_test_uptodate(folio))) {
                DEFINE_READAHEAD(ractl, NULL, NULL, inode->i_mapping, index);
 
                if (!IS_ERR(folio))
@@ -30,9 +31,9 @@ struct page *generic_read_merkle_tree_page(struct inode *inode, pgoff_t index,
                else if (num_ra_pages > 1)
                        page_cache_ra_unbounded(&ractl, num_ra_pages, 0);
                folio = read_mapping_folio(inode->i_mapping, index, NULL);
-               if (IS_ERR(folio))
-                       return ERR_CAST(folio);
        }
+       if (IS_ERR(folio))
+               return ERR_CAST(folio);
        return folio_file_page(folio, index);
 }
 EXPORT_SYMBOL_GPL(generic_read_merkle_tree_page);