On 6/30/25 10:50, wangzijie wrote: >> 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
Check after setattr_prepare() looks fine to me, in addition, can you please add more comments for the reason why we relocate code there? Thanks, > 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