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; + } + 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 _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
