orangefs: Convert orangefs to read_folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 29 Apr 2022 15:12:16 +0000 (11:12 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 9 May 2022 20:21:46 +0000 (16:21 -0400)
This is a full conversion which should be large folio ready, although
I have not tested it.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
fs/orangefs/inode.c

index bc7ccd15d7a38881479a7b7431e18ffac51b1fa3..241ac21f527ba6f0b5bce5fa4f38d99b0264aafc 100644 (file)
@@ -288,40 +288,39 @@ static void orangefs_readahead(struct readahead_control *rac)
        }
 }
 
-static int orangefs_readpage(struct file *file, struct page *page)
+static int orangefs_read_folio(struct file *file, struct folio *folio)
 {
-       struct folio *folio = page_folio(page);
-       struct inode *inode = page->mapping->host;
+       struct inode *inode = folio->mapping->host;
        struct iov_iter iter;
        struct bio_vec bv;
        ssize_t ret;
-       loff_t off; /* offset into this page */
+       loff_t off; /* offset of this folio in the file */
 
        if (folio_test_dirty(folio))
                orangefs_launder_folio(folio);
 
-       off = page_offset(page);
-       bv.bv_page = page;
-       bv.bv_len = PAGE_SIZE;
+       off = folio_pos(folio);
+       bv.bv_page = &folio->page;
+       bv.bv_len = folio_size(folio);
        bv.bv_offset = 0;
-       iov_iter_bvec(&iter, READ, &bv, 1, PAGE_SIZE);
+       iov_iter_bvec(&iter, READ, &bv, 1, folio_size(folio));
 
        ret = wait_for_direct_io(ORANGEFS_IO_READ, inode, &off, &iter,
-           PAGE_SIZE, inode->i_size, NULL, NULL, file);
+                       folio_size(folio), inode->i_size, NULL, NULL, file);
        /* this will only zero remaining unread portions of the page data */
        iov_iter_zero(~0U, &iter);
        /* takes care of potential aliasing */
-       flush_dcache_page(page);
+       flush_dcache_folio(folio);
        if (ret < 0) {
-               SetPageError(page);
+               folio_set_error(folio);
        } else {
-               SetPageUptodate(page);
-               if (PageError(page))
-                       ClearPageError(page);
+               folio_mark_uptodate(folio);
+               if (folio_test_error(folio))
+                       folio_clear_error(folio);
                ret = 0;
        }
-       /* unlock the page after the ->readpage() routine completes */
-       unlock_page(page);
+       /* unlock the folio after the ->read_folio() routine completes */
+       folio_unlock(folio);
         return ret;
 }
 
@@ -631,7 +630,7 @@ out:
 static const struct address_space_operations orangefs_address_operations = {
        .writepage = orangefs_writepage,
        .readahead = orangefs_readahead,
-       .readpage = orangefs_readpage,
+       .read_folio = orangefs_read_folio,
        .writepages = orangefs_writepages,
        .dirty_folio = filemap_dirty_folio,
        .write_begin = orangefs_write_begin,