]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ntfs: not zero out range beyond init in punch_hole
authorHyunchul Lee <hyc.lee@gmail.com>
Thu, 2 Apr 2026 23:54:11 +0000 (08:54 +0900)
committerNamjae Jeon <linkinjeon@kernel.org>
Sat, 18 Apr 2026 02:33:00 +0000 (11:33 +0900)
The area beyond initialized_size are read as zero values, there is no need
to zero out that region.

Signed-off-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
fs/ntfs/file.c

index e1a9ba544644f195b964833fc51484c1ddd2baf2..34003fa07dd1938e3332995c168e93299e993ee6 100644 (file)
@@ -876,14 +876,19 @@ static int ntfs_punch_hole(struct ntfs_inode *ni, int mode, loff_t offset,
        end_vcn = ntfs_bytes_to_cluster(vol, end_offset - 1) + 1;
 
        if (offset & vol->cluster_size_mask) {
-               loff_t to;
-
-               to = min_t(loff_t, ntfs_cluster_to_bytes(vol, start_vcn + 1),
-                               end_offset);
-               err = iomap_zero_range(vi, offset, to - offset, NULL,
-                               &ntfs_seek_iomap_ops,
-                               &ntfs_iomap_folio_ops, NULL);
-               if (err < 0 || (end_vcn - start_vcn) == 1)
+               if (offset < ni->initialized_size) {
+                       loff_t to;
+
+                       to = min_t(loff_t,
+                                  ntfs_cluster_to_bytes(vol, start_vcn + 1),
+                                  end_offset);
+                       err = iomap_zero_range(vi, offset, to - offset,
+                                              NULL, &ntfs_seek_iomap_ops,
+                                              &ntfs_iomap_folio_ops, NULL);
+                       if (err < 0)
+                               goto out;
+               }
+               if (end_vcn - start_vcn == 1)
                        goto out;
                start_vcn++;
        }
@@ -892,10 +897,14 @@ static int ntfs_punch_hole(struct ntfs_inode *ni, int mode, loff_t offset,
                loff_t from;
 
                from = ntfs_cluster_to_bytes(vol, end_vcn - 1);
-               err = iomap_zero_range(vi, from, end_offset - from, NULL,
-                               &ntfs_seek_iomap_ops,
-                               &ntfs_iomap_folio_ops, NULL);
-               if (err < 0 || (end_vcn - start_vcn) == 1)
+               if (from < ni->initialized_size) {
+                       err = iomap_zero_range(vi, from, end_offset - from,
+                                              NULL, &ntfs_seek_iomap_ops,
+                                              &ntfs_iomap_folio_ops, NULL);
+                       if (err < 0)
+                               goto out;
+               }
+               if (end_vcn - start_vcn == 1)
                        goto out;
                end_vcn--;
        }