| From: Pankaj Raghav <p.raghav@samsung.com> |
| Subject: mpage: use folios in bio end_io handler |
| Date: Tue, 11 Apr 2023 14:29:20 +0200 |
| |
| Use folios in the bio end_io handler. This conversion does the |
| appropriate handling on the folios in the respective end_io callback and |
| removes the call to page_endio(), which is soon to be removed. |
| |
| Link: https://lkml.kernel.org/r/20230411122920.30134-4-p.raghav@samsung.com |
| Signed-off-by: Pankaj Raghav <p.raghav@samsung.com> |
| Reviewed-by: Christoph Hellwig <hch@lst.de> |
| Cc: Alexander Viro <viro@zeniv.linux.org.uk> |
| Cc: Christian Brauner <brauner@kernel.org> |
| Cc: Jens Axboe <axboe@kernel.dk> |
| Cc: Luis Chamberlain <mcgrof@kernel.org> |
| Cc: Martin Brandenburg <martin@omnibond.com> |
| Cc: Matthew Wilcox (Oracle) <willy@infradead.org> |
| Cc: Mike Marshall <hubcap@omnibond.com> |
| Cc: Minchan Kim <minchan@kernel.org> |
| Cc: Sergey Senozhatsky <senozhatsky@chromium.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| fs/mpage.c | 28 ++++++++++++++++++---------- |
| 1 file changed, 18 insertions(+), 10 deletions(-) |
| |
| --- a/fs/mpage.c~mpage-use-folios-in-bio-end_io-handler |
| +++ a/fs/mpage.c |
| @@ -45,24 +45,32 @@ |
| */ |
| static void mpage_read_end_io(struct bio *bio) |
| { |
| - struct bio_vec *bv; |
| - struct bvec_iter_all iter_all; |
| + struct folio_iter fi; |
| + int err = blk_status_to_errno(bio->bi_status); |
| |
| - bio_for_each_segment_all(bv, bio, iter_all) |
| - page_endio(bv->bv_page, REQ_OP_READ, |
| - blk_status_to_errno(bio->bi_status)); |
| + bio_for_each_folio_all(fi, bio) { |
| + if (err) |
| + folio_set_error(fi.folio); |
| + else |
| + folio_mark_uptodate(fi.folio); |
| + folio_unlock(fi.folio); |
| + } |
| |
| bio_put(bio); |
| } |
| |
| static void mpage_write_end_io(struct bio *bio) |
| { |
| - struct bio_vec *bv; |
| - struct bvec_iter_all iter_all; |
| + struct folio_iter fi; |
| + int err = blk_status_to_errno(bio->bi_status); |
| |
| - bio_for_each_segment_all(bv, bio, iter_all) |
| - page_endio(bv->bv_page, REQ_OP_WRITE, |
| - blk_status_to_errno(bio->bi_status)); |
| + bio_for_each_folio_all(fi, bio) { |
| + if (err) { |
| + folio_set_error(fi.folio); |
| + mapping_set_error(fi.folio->mapping, err); |
| + } |
| + folio_end_writeback(fi.folio); |
| + } |
| |
| bio_put(bio); |
| } |
| _ |