On Fri, Jan 9, 2026 at 3:47 PM Chao Yu <[email protected]> wrote: > > Below testcase can change large folio supported inode from immutable > to mutable, it's not as expected, let's add a new check condition in > f2fs_setflags_common() to detect and reject it. > > - dd if=/dev/zero of=/mnt/f2fs/test bs=32k count=4 > - f2fs_io setflags immutable /mnt/f2fs/test > - echo 3 > /proc/sys/vm/drop_caches > : to reload inode with large folio > - f2fs_io read 32 0 1 mmap 0 0 /mnt/f2fs/test > - f2fs_io clearflags immutable /mnt/f2fs/test > > Signed-off-by: Chao Yu <[email protected]> > --- > fs/f2fs/file.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c > index ce291f152bc3..f7f9da0b215f 100644 > --- a/fs/f2fs/file.c > +++ b/fs/f2fs/file.c > @@ -2155,6 +2155,12 @@ static int f2fs_setflags_common(struct inode *inode, > u32 iflags, u32 mask) > } > } > > + if ((iflags ^ masked_flags) & F2FS_IMMUTABLE_FL) { > + if ((masked_flags & F2FS_IMMUTABLE_FL) && > + mapping_large_folio_support(inode->i_mapping)) > + return -EINVAL;
Hi Yu, I find it a bit odd to prevent unsetting immutable solely because large folios are in use. If unsetting immutable is considered unexpected behavior, it should be disallowed regardless of whether large folios are used, and apply equally in both cases. I'm not sure whether reverting the large folios setting is the better approach: truncate_pagecache(inode, inode->i_size); mapping_set_folio_order_range(inode->i_mapping, 0, 0); > + } > + > fi->i_flags = iflags | (fi->i_flags & ~mask); > f2fs_bug_on(F2FS_I_SB(inode), (fi->i_flags & F2FS_COMPR_FL) && > (fi->i_flags & F2FS_NOCOMP_FL)); > -- > 2.40.1 Thanks Barry _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
