>On 6/24/25 11:59, wangzijie wrote: >> To prevent scattered pin block generation, don't allow non-section aligned >> truncation >> to smaller or equal size on pinned file. But for truncation to larger size, >> after >> commit 3fdd89b452c2("f2fs: prevent writing without fallocate() for pinned >> files"), >> we only support overwrite IO to pinned file, so we don't need to consider >> attr->ia_size > i_size case. > >Zijie, can you take a look generic/494? suspect that it is caused by this >change. > >generic/494 3s ... - output mismatch (see >/share/git/fstests/results//generic/494.out.bad) > --- tests/generic/494.out 2025-01-12 21:57:40.279440664 +0800 > +++ /share/git/fstests/results//generic/494.out.bad 2025-06-30 > 10:01:37.000000000 +0800 > @@ -2,7 +2,7 @@ > Format and mount > Initialize file > Try to truncate > -ftruncate: Text file busy > +ftruncate: Invalid argument > Try to punch hole > fallocate: Text file busy > ... > (Run 'diff -u /share/git/fstests/tests/generic/494.out > /share/git/fstests/results//generic/494.out.bad' to see the entire diff) >Ran: generic/494 >Failures: generic/494 >Failed 1 of 1 tests > >Thanks,
Hi, Chao generic/494 swapon file and try to ftruncate. Before this change swap_acticate: set_inode_flag(inode, FI_PIN_FILE) ftruncate: setattr_prepare -inode_newsize_ok --return -ETXTBSY for SWAPFILE After this change: swap_acticate: set_inode_flag(inode, FI_PIN_FILE) ftruncate: prevent unaligned truncation before setattr_prepare() return -EINVAL Sorry for this. Maybe I should apply this check after setattr_prepare()? Or do you have some suggestions? >> >> Signed-off-by: wangzijie <wangzij...@honor.com> >> --- >> v4: >> - convert sbi first and apply change >> --- >> fs/f2fs/file.c | 11 +++++++++++ >> 1 file changed, 11 insertions(+) >> >> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c >> index 209f43653..4809f0fd6 100644 >> --- a/fs/f2fs/file.c >> +++ b/fs/f2fs/file.c >> @@ -1048,6 +1048,17 @@ int f2fs_setattr(struct mnt_idmap *idmap, struct >> dentry *dentry, >> !IS_ALIGNED(attr->ia_size, >> F2FS_BLK_TO_BYTES(fi->i_cluster_size))) >> return -EINVAL; >> + /* >> + * To prevent scattered pin block generation, we don't allow >> + * smaller/equal size unaligned truncation for pinned file. >> + * We only support overwrite IO to pinned file, so don't >> + * care about larger size truncation. >> + */ >> + if (f2fs_is_pinned_file(inode) && >> + attr->ia_size <= i_size_read(inode) && >> + !IS_ALIGNED(attr->ia_size, >> + F2FS_BLK_TO_BYTES(CAP_BLKS_PER_SEC(sbi)))) >> + return -EINVAL; >> } >> >> err = setattr_prepare(idmap, dentry, attr); _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel