Commit 9b4b3f84 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Dave Kleikamp

jfs: Convert metapage_read_folio to use folio APIs

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: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: default avatarDave Kleikamp <dave.kleikamp@oracle.com>
parent 6d69b6c1
...@@ -266,14 +266,14 @@ static void last_read_complete(struct page *page) ...@@ -266,14 +266,14 @@ static void last_read_complete(struct page *page)
static void metapage_read_end_io(struct bio *bio) 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) { if (bio->bi_status) {
printk(KERN_ERR "metapage_read_end_io: I/O error\n"); 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); bio_put(bio);
} }
...@@ -469,20 +469,18 @@ static int metapage_writepage(struct page *page, struct writeback_control *wbc) ...@@ -469,20 +469,18 @@ static int metapage_writepage(struct page *page, struct writeback_control *wbc)
static int metapage_read_folio(struct file *fp, struct folio *folio) static int metapage_read_folio(struct file *fp, struct folio *folio)
{ {
struct page *page = &folio->page; struct inode *inode = folio->mapping->host;
struct inode *inode = page->mapping->host;
struct bio *bio = NULL; struct bio *bio = NULL;
int block_offset; 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 page_start; /* address of page in fs blocks */
sector_t pblock; sector_t pblock;
int xlen; int xlen;
unsigned int len; unsigned int len;
int offset; int offset;
BUG_ON(!PageLocked(page)); BUG_ON(!folio_test_locked(folio));
page_start = (sector_t)page->index << page_start = folio_pos(folio) >> inode->i_blkbits;
(PAGE_SHIFT - inode->i_blkbits);
block_offset = 0; block_offset = 0;
while (block_offset < blocks_per_page) { while (block_offset < blocks_per_page) {
...@@ -490,9 +488,9 @@ static int metapage_read_folio(struct file *fp, struct folio *folio) ...@@ -490,9 +488,9 @@ static int metapage_read_folio(struct file *fp, struct folio *folio)
pblock = metapage_get_blocks(inode, page_start + block_offset, pblock = metapage_get_blocks(inode, page_start + block_offset,
&xlen); &xlen);
if (pblock) { if (pblock) {
if (!PagePrivate(page)) if (!folio->private)
insert_metapage(page, NULL); insert_metapage(&folio->page, NULL);
inc_io(page); inc_io(&folio->page);
if (bio) if (bio)
submit_bio(bio); submit_bio(bio);
...@@ -501,11 +499,10 @@ static int metapage_read_folio(struct file *fp, struct folio *folio) ...@@ -501,11 +499,10 @@ static int metapage_read_folio(struct file *fp, struct folio *folio)
bio->bi_iter.bi_sector = bio->bi_iter.bi_sector =
pblock << (inode->i_blkbits - 9); pblock << (inode->i_blkbits - 9);
bio->bi_end_io = metapage_read_end_io; bio->bi_end_io = metapage_read_end_io;
bio->bi_private = page; bio->bi_private = folio;
len = xlen << inode->i_blkbits; len = xlen << inode->i_blkbits;
offset = block_offset << inode->i_blkbits; offset = block_offset << inode->i_blkbits;
if (bio_add_page(bio, page, len, offset) < len) bio_add_folio_nofail(bio, folio, len, offset);
goto add_failed;
block_offset += xlen; block_offset += xlen;
} else } else
block_offset++; block_offset++;
...@@ -513,15 +510,9 @@ static int metapage_read_folio(struct file *fp, struct folio *folio) ...@@ -513,15 +510,9 @@ static int metapage_read_folio(struct file *fp, struct folio *folio)
if (bio) if (bio)
submit_bio(bio); submit_bio(bio);
else else
unlock_page(page); folio_unlock(folio);
return 0; 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) static bool metapage_release_folio(struct folio *folio, gfp_t gfp_mask)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment