Use bio_for_each_folio_all() to iterate over each folio in the bio.
This lets us use folio_end_read() which saves an atomic operation and
memory barrier compared to marking the folio uptodate and unlocking
it as two separate operations.  This also removes a few hidden calls
to compound_head().

Signed-off-by: Matthew Wilcox (Oracle) <wi...@infradead.org>
---
 fs/f2fs/data.c | 21 ++++++++-------------
 1 file changed, 8 insertions(+), 13 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 7cb2272c723e..aa08ab387e58 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -136,27 +136,22 @@ struct bio_post_read_ctx {
  */
 static void f2fs_finish_read_bio(struct bio *bio, bool in_task)
 {
-       struct bio_vec *bv;
-       struct bvec_iter_all iter_all;
+       struct folio_iter fi;
        struct bio_post_read_ctx *ctx = bio->bi_private;
 
-       bio_for_each_segment_all(bv, bio, iter_all) {
-               struct page *page = bv->bv_page;
+       bio_for_each_folio_all(fi, bio) {
+               struct folio *folio = fi.folio;
 
-               if (f2fs_is_compressed_page(page)) {
+               if (f2fs_is_compressed_page(&folio->page)) {
                        if (ctx && !ctx->decompression_attempted)
-                               f2fs_end_read_compressed_page(page, true, 0,
+                               f2fs_end_read_compressed_page(&folio->page, 
true, 0,
                                                        in_task);
-                       f2fs_put_page_dic(page, in_task);
+                       f2fs_put_page_dic(&folio->page, in_task);
                        continue;
                }
 
-               if (bio->bi_status)
-                       ClearPageUptodate(page);
-               else
-                       SetPageUptodate(page);
-               dec_page_count(F2FS_P_SB(page), __read_io_type(page));
-               unlock_page(page);
+               dec_page_count(F2FS_F_SB(folio), __read_io_type(&folio->page));
+               folio_end_read(folio, bio->bi_status == 0);
        }
 
        if (ctx)
-- 
2.45.2



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to