]> www.infradead.org Git - linux.git/commitdiff
jfs: Convert metapage_read_folio to use folio APIs
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 17 Apr 2024 17:56:45 +0000 (18:56 +0100)
committerDave Kleikamp <dave.kleikamp@oracle.com>
Fri, 24 May 2024 15:26:04 +0000 (10:26 -0500)
Use bio_add_folio_nofail() as we just allocated the bio and know
it cannot fail.  Other than that, this is a 1:1 conversion from
page APIs to folio APIs.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
fs/jfs/jfs_metapage.c

index 961569c1115901b84ec84cb58b93d53561dd5a96..8266c43ec72806b456f53627be3f88563928dc40 100644 (file)
@@ -266,14 +266,14 @@ static void last_read_complete(struct page *page)
 
 static void metapage_read_end_io(struct bio *bio)
 {
-       struct page *page = bio->bi_private;
+       struct folio *folio = bio->bi_private;
 
        if (bio->bi_status) {
                printk(KERN_ERR "metapage_read_end_io: I/O error\n");
-               SetPageError(page);
+               folio_set_error(folio);
        }
 
-       dec_io(page, last_read_complete);
+       dec_io(&folio->page, last_read_complete);
        bio_put(bio);
 }
 
@@ -469,20 +469,18 @@ err_out:
 
 static int metapage_read_folio(struct file *fp, struct folio *folio)
 {
-       struct page *page = &folio->page;
-       struct inode *inode = page->mapping->host;
+       struct inode *inode = folio->mapping->host;
        struct bio *bio = NULL;
        int block_offset;
-       int blocks_per_page = i_blocks_per_page(inode, page);
+       int blocks_per_page = i_blocks_per_folio(inode, folio);
        sector_t page_start;    /* address of page in fs blocks */
        sector_t pblock;
        int xlen;
        unsigned int len;
        int offset;
 
-       BUG_ON(!PageLocked(page));
-       page_start = (sector_t)page->index <<
-                    (PAGE_SHIFT - inode->i_blkbits);
+       BUG_ON(!folio_test_locked(folio));
+       page_start = folio_pos(folio) >> inode->i_blkbits;
 
        block_offset = 0;
        while (block_offset < blocks_per_page) {
@@ -490,9 +488,9 @@ static int metapage_read_folio(struct file *fp, struct folio *folio)
                pblock = metapage_get_blocks(inode, page_start + block_offset,
                                             &xlen);
                if (pblock) {
-                       if (!PagePrivate(page))
-                               insert_metapage(page, NULL);
-                       inc_io(page);
+                       if (!folio->private)
+                               insert_metapage(&folio->page, NULL);
+                       inc_io(&folio->page);
                        if (bio)
                                submit_bio(bio);
 
@@ -501,11 +499,10 @@ static int metapage_read_folio(struct file *fp, struct folio *folio)
                        bio->bi_iter.bi_sector =
                                pblock << (inode->i_blkbits - 9);
                        bio->bi_end_io = metapage_read_end_io;
-                       bio->bi_private = page;
+                       bio->bi_private = folio;
                        len = xlen << inode->i_blkbits;
                        offset = block_offset << inode->i_blkbits;
-                       if (bio_add_page(bio, page, len, offset) < len)
-                               goto add_failed;
+                       bio_add_folio_nofail(bio, folio, len, offset);
                        block_offset += xlen;
                } else
                        block_offset++;
@@ -513,15 +510,9 @@ static int metapage_read_folio(struct file *fp, struct folio *folio)
        if (bio)
                submit_bio(bio);
        else
-               unlock_page(page);
+               folio_unlock(folio);
 
        return 0;
-
-add_failed:
-       printk(KERN_ERR "JFS: bio_add_page failed unexpectedly\n");
-       bio_put(bio);
-       dec_io(page, last_read_complete);
-       return -EIO;
 }
 
 static bool metapage_release_folio(struct folio *folio, gfp_t gfp_mask)