page_endio() already works on folios by converting a page in to a folio as the first step. Convert page_endio to folio_endio by taking a folio as the first parameter. Instead of doing a page to folio conversion in the page_endio() function, the consumers of this API do this conversion and call the folio_endio() function in this patch. The following patches will convert the consumers of this API to use native folio functions to pass to folio_endio(). Signed-off-by: Pankaj Raghav <p.raghav@xxxxxxxxxxx> --- drivers/block/zram/zram_drv.c | 2 +- fs/mpage.c | 2 +- fs/orangefs/inode.c | 2 +- include/linux/pagemap.h | 2 +- mm/filemap.c | 8 +++----- 5 files changed, 7 insertions(+), 9 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index aa490da3cef2..f441251c9138 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -610,7 +610,7 @@ static void zram_page_end_io(struct bio *bio) { struct page *page = bio_first_page_all(bio); - page_endio(page, op_is_write(bio_op(bio)), + folio_endio(page_folio(page), op_is_write(bio_op(bio)), blk_status_to_errno(bio->bi_status)); bio_put(bio); } diff --git a/fs/mpage.c b/fs/mpage.c index 22b9de5ddd68..40e86e839e77 100644 --- a/fs/mpage.c +++ b/fs/mpage.c @@ -50,7 +50,7 @@ static void mpage_end_io(struct bio *bio) bio_for_each_segment_all(bv, bio, iter_all) { struct page *page = bv->bv_page; - page_endio(page, bio_op(bio), + folio_endio(page_folio(page), bio_op(bio), blk_status_to_errno(bio->bi_status)); } diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c index aefdf1d3be7c..b12d099510ea 100644 --- a/fs/orangefs/inode.c +++ b/fs/orangefs/inode.c @@ -276,7 +276,7 @@ static void orangefs_readahead(struct readahead_control *rac) /* clean up. */ while ((page = readahead_page(rac))) { - page_endio(page, false, ret); + folio_endio(page_folio(page), false, ret); put_page(page); } } diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index fdcd595d2294..80eab64b834f 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -1076,7 +1076,7 @@ int filemap_migrate_folio(struct address_space *mapping, struct folio *dst, #else #define filemap_migrate_folio NULL #endif -void page_endio(struct page *page, bool is_write, int err); +void folio_endio(struct folio *folio, bool is_write, int err); void folio_end_private_2(struct folio *folio); void folio_wait_private_2(struct folio *folio); diff --git a/mm/filemap.c b/mm/filemap.c index a34abfe8c654..a89940f74974 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1626,13 +1626,11 @@ void folio_end_writeback(struct folio *folio) EXPORT_SYMBOL(folio_end_writeback); /* - * After completing I/O on a page, call this routine to update the page + * After completing I/O on a folio, call this routine to update the folio * flags appropriately */ -void page_endio(struct page *page, bool is_write, int err) +void folio_endio(struct folio *folio, bool is_write, int err) { - struct folio *folio = page_folio(page); - if (!is_write) { if (!err) { folio_mark_uptodate(folio); @@ -1653,7 +1651,7 @@ void page_endio(struct page *page, bool is_write, int err) folio_end_writeback(folio); } } -EXPORT_SYMBOL_GPL(page_endio); +EXPORT_SYMBOL_GPL(folio_endio); /** * __folio_lock - Get a lock on the folio, assuming we need to sleep to get it. -- 2.34.1