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

ntfs3: use folios more in ntfs_compress_write()

Remove the local 'page' variable and do everything in terms of folios. 
Removes the last user of copy_page_from_iter_atomic() and a hidden call to
compound_head() in ClearPageDirty().

Link: https://lkml.kernel.org/r/20250514170607.3000994-3-willy@infradead.org


Signed-off-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Cc: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Hugh Dickins <hughd@google.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent acc53a0b
Loading
Loading
Loading
Loading
+13 −18
Original line number Diff line number Diff line
@@ -998,7 +998,8 @@ static ssize_t ntfs_compress_write(struct kiocb *iocb, struct iov_iter *from)
	struct ntfs_inode *ni = ntfs_i(inode);
	u64 valid = ni->i_valid;
	struct ntfs_sb_info *sbi = ni->mi.sbi;
	struct page *page, **pages = NULL;
	struct page **pages = NULL;
	struct folio *folio;
	size_t written = 0;
	u8 frame_bits = NTFS_LZNT_CUNIT + sbi->cluster_bits;
	u32 frame_size = 1u << frame_bits;
@@ -1008,7 +1009,6 @@ static ssize_t ntfs_compress_write(struct kiocb *iocb, struct iov_iter *from)
	u64 frame_vbo;
	pgoff_t index;
	bool frame_uptodate;
	struct folio *folio;

	if (frame_size < PAGE_SIZE) {
		/*
@@ -1062,8 +1062,7 @@ static ssize_t ntfs_compress_write(struct kiocb *iocb, struct iov_iter *from)
					    pages_per_frame);
			if (err) {
				for (ip = 0; ip < pages_per_frame; ip++) {
					page = pages[ip];
					folio = page_folio(page);
					folio = page_folio(pages[ip]);
					folio_unlock(folio);
					folio_put(folio);
				}
@@ -1074,10 +1073,9 @@ static ssize_t ntfs_compress_write(struct kiocb *iocb, struct iov_iter *from)
		ip = off >> PAGE_SHIFT;
		off = offset_in_page(valid);
		for (; ip < pages_per_frame; ip++, off = 0) {
			page = pages[ip];
			folio = page_folio(page);
			zero_user_segment(page, off, PAGE_SIZE);
			flush_dcache_page(page);
			folio = page_folio(pages[ip]);
			folio_zero_segment(folio, off, PAGE_SIZE);
			flush_dcache_folio(folio);
			folio_mark_uptodate(folio);
		}

@@ -1086,8 +1084,7 @@ static ssize_t ntfs_compress_write(struct kiocb *iocb, struct iov_iter *from)
		ni_unlock(ni);

		for (ip = 0; ip < pages_per_frame; ip++) {
			page = pages[ip];
			folio = page_folio(page);
			folio = page_folio(pages[ip]);
			folio_mark_uptodate(folio);
			folio_unlock(folio);
			folio_put(folio);
@@ -1131,8 +1128,7 @@ static ssize_t ntfs_compress_write(struct kiocb *iocb, struct iov_iter *from)
				if (err) {
					for (ip = 0; ip < pages_per_frame;
					     ip++) {
						page = pages[ip];
						folio = page_folio(page);
						folio = page_folio(pages[ip]);
						folio_unlock(folio);
						folio_put(folio);
					}
@@ -1150,10 +1146,10 @@ static ssize_t ntfs_compress_write(struct kiocb *iocb, struct iov_iter *from)
		for (;;) {
			size_t cp, tail = PAGE_SIZE - off;

			page = pages[ip];
			cp = copy_page_from_iter_atomic(page, off,
			folio = page_folio(pages[ip]);
			cp = copy_folio_from_iter_atomic(folio, off,
							min(tail, bytes), from);
			flush_dcache_page(page);
			flush_dcache_folio(folio);

			copied += cp;
			bytes -= cp;
@@ -1173,9 +1169,8 @@ static ssize_t ntfs_compress_write(struct kiocb *iocb, struct iov_iter *from)
		ni_unlock(ni);

		for (ip = 0; ip < pages_per_frame; ip++) {
			page = pages[ip];
			ClearPageDirty(page);
			folio = page_folio(page);
			folio = page_folio(pages[ip]);
			folio_clear_dirty(folio);
			folio_mark_uptodate(folio);
			folio_unlock(folio);
			folio_put(folio);