aboutsummaryrefslogtreecommitdiffstats
path: root/mm/filemap.c
diff options
context:
space:
mode:
authorMatthew Wilcox (Oracle) <willy@infradead.org>2022-04-29 08:43:23 -0400
committerMatthew Wilcox (Oracle) <willy@infradead.org>2022-05-09 16:21:40 -0400
commit5efe7448a1426250b5747c10ad438517f44f1e51 (patch)
treeafe256df7b4de7af6d60304322efa36813f2016c /mm/filemap.c
parentbuffer: Rewrite nobh_truncate_page() to use folios (diff)
downloadlinux-dev-5efe7448a1426250b5747c10ad438517f44f1e51.tar.xz
linux-dev-5efe7448a1426250b5747c10ad438517f44f1e51.zip
fs: Introduce aops->read_folio
Change all the callers of ->readpage to call ->read_folio in preference, if it exists. This is a transitional duplication, and will be removed by the end of the series. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Diffstat (limited to 'mm/filemap.c')
-rw-r--r--mm/filemap.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/mm/filemap.c b/mm/filemap.c
index c15cfc28f9ce..96e3d7ffd98e 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2419,7 +2419,10 @@ static int filemap_read_folio(struct file *file, struct address_space *mapping,
*/
folio_clear_error(folio);
/* Start the actual read. The read will unlock the page. */
- error = mapping->a_ops->readpage(file, &folio->page);
+ if (mapping->a_ops->read_folio)
+ error = mapping->a_ops->read_folio(file, folio);
+ else
+ error = mapping->a_ops->readpage(file, &folio->page);
if (error)
return error;
@@ -3447,7 +3450,7 @@ int generic_file_mmap(struct file *file, struct vm_area_struct *vma)
{
struct address_space *mapping = file->f_mapping;
- if (!mapping->a_ops->readpage)
+ if (!mapping->a_ops->read_folio && !mapping->a_ops->readpage)
return -ENOEXEC;
file_accessed(file);
vma->vm_ops = &generic_file_vm_ops;
@@ -3505,6 +3508,8 @@ repeat:
filler:
if (filler)
err = filler(data, &folio->page);
+ else if (mapping->a_ops->read_folio)
+ err = mapping->a_ops->read_folio(data, folio);
else
err = mapping->a_ops->readpage(data, &folio->page);