Hellom While compiling, first time around, I got the below. fs/ntfs3/file.c: In function 'ntfs_truncate': fs/ntfs3/file.c:498:60: error: invalid type argument of '->' (have 'struct ntfs_mount_options') 498 | &new_valid, ni->mi.sbi->options->prealloc, NULL); | ^~ make[2]: *** [scripts/Makefile.build:277: fs/ntfs3/file.o] Error 1 make[1]: *** [scripts/Makefile.build:540: fs/ntfs3] Error 2 So, in the file fs/ntfs3/file.c I changed ni->mi.sbi->options->prealloc to ni->mi.sbi->options.prealloc I don't really follow/understand the code, to understand what exactly the logic is, except that you are trying to set boolean 'keep_prealloc' call-argument for attr_set_size() by using the ntfs_mount_option bit-field 'prealloc' which is to "Preallocate space when file is growing", prototyped in the file fs/ntfs3/ntfs_fs.h * Built new 5.15.0-0.rc3.20211001git4de593fb965f.30.fc35.x86_64 kernel. (4 hrs on my machine) * I was able to include patch into rpmbuild of kernel src patch, with aforementioned correction * first reconfirmed/verified bug on old kernel * installed newly built kernel * attempt reproduction no success meaning bug not present on new kernel, patch/fix makes file size on overwrite to be as expected. note, I am not an expert, and as a user, I don't know 100% what correct behavior should be, only what seems reasonable expected behavior, But you are experts, so please excuse me for reiterating what you know. NTFS is a filesystem that was designed by microsoft for windows, and the way its fs-driver must update is so that on-disk structures is suitable for windows in-kernel structures. A kernel driver for linux, only adapts on disk-ntfs structures to something suitable for linux in-kernel structures, but must update the on disk structures the way Windows expects/designed it to. So if you defended old behavior, I wouldn't know. So its your call, to decide if it is a bug, and whether your patch fixes. On my side, my machine is one I work on. patch seems to fix claimed bug. So I hope there is no side effect, nothing corrupts or becomes unstable. That was fast fix. congrats. Log: [root@sirius gana]# [root@sirius gana]# mount -t ntfs3 /dev/sda17 /mnt/a17/ [root@sirius gana]# [root@sirius gana]# rm -f /mnt/a17/test1.bin /mnt/a17/test2.bin [root@sirius gana]# dd if=/dev/zero of=/mnt/a17/test2.bin bs=1M count=3000 3000+0 records in 3000+0 records out 3145728000 bytes (3.1 GB, 2.9 GiB) copied, 5.40015 s, 583 MB/s [root@sirius gana]# dd if=/dev/zero of=/mnt/a17/test1.bin bs=1M count=6000 6000+0 records in 6000+0 records out 6291456000 bytes (6.3 GB, 5.9 GiB) copied, 16.1809 s, 389 MB/s [root@sirius gana]# ls -ls /mnt/a17/test1.bin /mnt/a17/test2.bin 6144000 -rw-r--r--. 1 root root 6291456000 Oct 24 13:42 /mnt/a17/test1.bin 3072000 -rw-r--r--. 1 root root 3145728000 Oct 24 13:41 /mnt/a17/test2.bin [root@sirius gana]# cp /mnt/a17/test2.bin /mnt/a17/test1.bin cp: overwrite '/mnt/a17/test1.bin'? y [root@sirius gana]# ls -ls /mnt/a17/test1.bin /mnt/a17/test2.bin 3072000 -rw-r--r--. 1 root root 3145728000 Oct 24 13:42 /mnt/a17/test1.bin 3072000 -rw-r--r--. 1 root root 3145728000 Oct 24 13:41 /mnt/a17/test2.bin [root@sirius gana]# stat /mnt/a17/test1.bin File: /mnt/a17/test1.bin Size: 3145728000 Blocks: 6144000 IO Block: 4096 regular file Device: 10301h/66305d Inode: 44 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: system_u:object_r:unlabeled_t:s0 Access: 2021-10-24 13:41:59.265503300 +0530 Modify: 2021-10-24 13:42:44.738904000 +0530 Change: 2021-10-24 13:42:44.738904000 +0530 Birth: 2021-10-24 13:41:59.265503300 +0530 [root@sirius gana]# stat /mnt/a17/test2.bin File: /mnt/a17/test2.bin Size: 3145728000 Blocks: 6144000 IO Block: 4096 regular file Device: 10301h/66305d Inode: 43 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: system_u:object_r:unlabeled_t:s0 Access: 2021-10-24 13:42:40.610776900 +0530 Modify: 2021-10-24 13:41:52.684315600 +0530 Change: 2021-10-24 13:41:52.684315600 +0530 Birth: 2021-10-24 13:41:47.284266100 +0530 From: Kari Argillander <kari.argillander@xxxxxxxxx> Sent: Saturday, October 23, 2021 5:55 AM To: Konstantin Komarov <almaz.alexandrovich@xxxxxxxxxxxxxxxxxxxx>; hgkamath@xxxxxxxxxxx <hgkamath@xxxxxxxxxxx> Cc: ntfs3@xxxxxxxxxxxxxxx <ntfs3@xxxxxxxxxxxxxxx>; linux-kernel@xxxxxxxxxxxxxxx <linux-kernel@xxxxxxxxxxxxxxx>; linux-fsdevel@xxxxxxxxxxxxxxx <linux-fsdevel@xxxxxxxxxxxxxxx> Subject: Re: [PATCH 1/4] fs/ntfs3: Keep preallocated only if option prealloc enabled On Fri, Oct 22, 2021 at 06:54:31PM +0300, Konstantin Komarov wrote: > If size of file was reduced, we still kept allocated blocks. > This commit makes ntfs3 work as other fs like btrfs. > https://bugzilla.kernel.org/show_bug.cgi?id=214719 Link: https://bugzilla.kernel.org/show_bug.cgi?id=214719 > Fixes: 4342306f0f0d ("fs/ntfs3: Add file operations and implementation") > > Reported-by: Ganapathi Kamath Add <hgkamath@xxxxxxxxxxx> I also added to loop here. Ganapathi can you test if this patch fix your problem? > Signed-off-by: Konstantin Komarov <almaz.alexandrovich@xxxxxxxxxxxxxxxxxxxx> > --- > fs/ntfs3/file.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/fs/ntfs3/file.c b/fs/ntfs3/file.c > index 43b1451bff53..3ac0482c6880 100644 > --- a/fs/ntfs3/file.c > +++ b/fs/ntfs3/file.c > @@ -494,7 +494,7 @@ static int ntfs_truncate(struct inode *inode, loff_t new_size) > > down_write(&ni->file.run_lock); > err = attr_set_size(ni, ATTR_DATA, NULL, 0, &ni->file.run, new_size, > - &new_valid, true, NULL); > + &new_valid, ni->mi.sbi->options->prealloc, NULL); > up_write(&ni->file.run_lock); > > if (new_valid < ni->i_valid) > -- > 2.33.0 > >