Commit c3f4200a authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Andrew Morton
Browse files

ntfs3: convert ntfs_zero_range() to use a folio

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: default avatarMatthew 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: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 24a7b352
Loading
Loading
Loading
Loading
+16 −15
Original line number Diff line number Diff line
@@ -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: