diff --git a/mm/filemap.c b/mm/filemap.c
index 4f3753f0a158..680d98086c00 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -3775,6 +3775,8 @@ static struct folio *do_read_cache_folio(struct address_space *mapping,
 	struct folio *folio;
 	int err;
 
+	if (!filler && (!mapping->a_ops || !mapping->a_ops->read_folio))
+		return ERR_PTR(-ENOSYS);
 	if (!filler)
 		filler = mapping->a_ops->read_folio;
 repeat: