ntfs3: convert ntfs_zero_range() to use a folio
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Mon, 16 Oct 2023 20:11:07 +0000 (21:11 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 25 Oct 2023 23:47:09 +0000 (16:47 -0700)
Use the folio API throughout, saving six hidden calls to compound_head().

Link: https://lkml.kernel.org/r/20231016201114.1928083-21-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Andreas Gruenbacher <agruenba@redhat.com>
Cc: Pankaj Raghav <p.raghav@samsung.com>
Cc: Ryusuke Konishi <konishi.ryusuke@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
fs/ntfs3/file.c

index 962f12c..a003a69 100644 (file)
@@ -187,7 +187,7 @@ static int ntfs_zero_range(struct inode *inode, u64 vbo, u64 vbo_to)
        struct buffer_head *head, *bh;
        u32 bh_next, bh_off, to;
        sector_t iblock;
-       struct page *page;
+       struct folio *folio;
 
        for (; idx < idx_end; idx += 1, from = 0) {
                page_off = (loff_t)idx << PAGE_SHIFT;
@@ -195,16 +195,17 @@ static int ntfs_zero_range(struct inode *inode, u64 vbo, u64 vbo_to)
                                                       PAGE_SIZE;
                iblock = page_off >> inode->i_blkbits;
 
-               page = find_or_create_page(mapping, idx,
-                                          mapping_gfp_constraint(mapping,
-                                                                 ~__GFP_FS));
-               if (!page)
-                       return -ENOMEM;
+               folio = __filemap_get_folio(mapping, idx,
+                               FGP_LOCK | FGP_ACCESSED | FGP_CREAT,
+                               mapping_gfp_constraint(mapping, ~__GFP_FS));
+               if (IS_ERR(folio))
+                       return PTR_ERR(folio);
 
-               if (!page_has_buffers(page))
-                       create_empty_buffers(page, blocksize, 0);
+               head = folio_buffers(folio);
+               if (!head)
+                       head = folio_create_empty_buffers(folio, blocksize, 0);
 
-               bh = head = page_buffers(page);
+               bh = head;
                bh_off = 0;
                do {
                        bh_next = bh_off + blocksize;
@@ -220,14 +221,14 @@ static int ntfs_zero_range(struct inode *inode, u64 vbo, u64 vbo_to)
                        }
 
                        /* Ok, it's mapped. Make sure it's up-to-date. */
-                       if (PageUptodate(page))
+                       if (folio_test_uptodate(folio))
                                set_buffer_uptodate(bh);
 
                        if (!buffer_uptodate(bh)) {
                                err = bh_read(bh, 0);
                                if (err < 0) {
-                                       unlock_page(page);
-                                       put_page(page);
+                                       folio_unlock(folio);
+                                       folio_put(folio);
                                        goto out;
                                }
                        }
@@ -237,10 +238,10 @@ static int ntfs_zero_range(struct inode *inode, u64 vbo, u64 vbo_to)
                } while (bh_off = bh_next, iblock += 1,
                         head != (bh = bh->b_this_page));
 
-               zero_user_segment(page, from, to);
+               folio_zero_segment(folio, from, to);
 
-               unlock_page(page);
-               put_page(page);
+               folio_unlock(folio);
+               folio_put(folio);
                cond_resched();
        }
 out: