filemap: Convert filemap_read_page to take a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 10 Mar 2021 15:19:30 +0000 (10:19 -0500)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Tue, 4 Jan 2022 18:15:33 +0000 (13:15 -0500)
One of the callers already had a folio; the other two grow by a few
bytes, but filemap_read_page() shrinks by 50 bytes for a net reduction
of 27 bytes.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: William Kucharski <william.kucharski@oracle.com>
mm/filemap.c

index 33e638f1ca3421e43b711a87bbdb692db970c92c..581f9fdb340662daf1b8b9de3603b09dc13b12c2 100644 (file)
@@ -2369,8 +2369,8 @@ retry:
        rcu_read_unlock();
 }
 
-static int filemap_read_page(struct file *file, struct address_space *mapping,
-               struct page *page)
+static int filemap_read_folio(struct file *file, struct address_space *mapping,
+               struct folio *folio)
 {
        int error;
 
@@ -2379,16 +2379,16 @@ static int filemap_read_page(struct file *file, struct address_space *mapping,
         * eg. multipath errors.  PG_error will be set again if readpage
         * fails.
         */
-       ClearPageError(page);
+       folio_clear_error(folio);
        /* Start the actual read. The read will unlock the page. */
-       error = mapping->a_ops->readpage(file, page);
+       error = mapping->a_ops->readpage(file, &folio->page);
        if (error)
                return error;
 
-       error = wait_on_page_locked_killable(page);
+       error = folio_wait_locked_killable(folio);
        if (error)
                return error;
-       if (PageUptodate(page))
+       if (folio_test_uptodate(folio))
                return 0;
        shrink_readahead_size_eio(&file->f_ra);
        return -EIO;
@@ -2464,7 +2464,7 @@ static int filemap_update_page(struct kiocb *iocb,
        if (iocb->ki_flags & (IOCB_NOIO | IOCB_NOWAIT | IOCB_WAITQ))
                goto unlock;
 
-       error = filemap_read_page(iocb->ki_filp, mapping, &folio->page);
+       error = filemap_read_folio(iocb->ki_filp, mapping, folio);
        goto unlock_mapping;
 unlock:
        folio_unlock(folio);
@@ -2506,7 +2506,7 @@ static int filemap_create_page(struct file *file,
        if (error)
                goto error;
 
-       error = filemap_read_page(file, mapping, page);
+       error = filemap_read_folio(file, mapping, page_folio(page));
        if (error)
                goto error;
 
@@ -3168,7 +3168,7 @@ page_not_uptodate:
         * and we need to check for errors.
         */
        fpin = maybe_unlock_mmap_for_io(vmf, fpin);
-       error = filemap_read_page(file, mapping, page);
+       error = filemap_read_folio(file, mapping, page_folio(page));
        if (fpin)
                goto out_retry;
        put_page(page);