From 8a81803f87504ffd735f2a77f1299eadf2cbdf32 Mon Sep 17 00:00:00 2001 From: "Matthew Wilcox (Oracle)" Date: Wed, 15 Jul 2026 10:38:02 +0900 Subject: [PATCH] ntfs: Use zero_user_segment() in handle_bounds_compressed_page() This fixes handle_bounds_compressed_page() on highmem memory as page_address() does not work on memory which has been kmap_local(), only on kmap() memory. Fixes: 495e90fa3348 ("ntfs: update attrib operations") Signed-off-by: Matthew Wilcox (Oracle) Reviewed-by: Hyunchul Lee Signed-off-by: Namjae Jeon --- fs/ntfs/compress.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/fs/ntfs/compress.c b/fs/ntfs/compress.c index 8078041b8796..f03fae63c199 100644 --- a/fs/ntfs/compress.c +++ b/fs/ntfs/compress.c @@ -109,16 +109,16 @@ static inline void handle_bounds_compressed_page(struct page *page, if ((pos + PAGE_SIZE > initialized_size) && (initialized_size < i_size)) { - u8 *kp = page_address(page); - unsigned int kp_ofs; + size_t offset; ntfs_debug("Zeroing page region outside initialized size."); - if (pos >= initialized_size) { - clear_page(kp); - return; - } - kp_ofs = initialized_size & ~PAGE_MASK; - memset(kp + kp_ofs, 0, PAGE_SIZE - kp_ofs); + if (pos >= initialized_size) + offset = 0; + else + offset = offset_in_page(initialized_size); + zero_user_segment(page, offset, PAGE_SIZE); + } else { + flush_dcache_page(page); } } @@ -223,7 +223,6 @@ return_error: */ handle_bounds_compressed_page(dp, i_size, initialized_size); - flush_dcache_page(dp); kunmap_local(page_address(dp)); SetPageUptodate(dp); unlock_page(dp); @@ -759,7 +758,6 @@ lock_retry_remap: */ handle_bounds_compressed_page(page, i_size, initialized_size); - flush_dcache_page(page); kunmap_local(page_address(page)); SetPageUptodate(page); unlock_page(page);