F2FS large folios are only enabled for immutable non-compressed files.
Writable open and writable mmap reject such mappings, but truncate(2)
through f2fs_setattr() misses the same guard.

If FS_IMMUTABLE_FL is cleared while the inode is still cached, the mapping
can keep large-folio support and ATTR_SIZE can change i_size. Reject size
changes in that state.

Fixes: 05e65c14ea59 ("f2fs: support large folio for immutable non-compressed 
case")
Signed-off-by: Wenjie Qi <[email protected]>
---
Changes in v2:
- Drop the obsolete user.fadvise/chmod part and keep only the ATTR_SIZE fix.

Tested with QEMU by clearing immutable on a cached large-folio file and
checking that truncate(2) now fails with EOPNOTSUPP.

 fs/f2fs/file.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 6edf0105dbc8..80a64f0ff9d6 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -1098,6 +1098,8 @@ int f2fs_setattr(struct mnt_idmap *idmap, struct dentry 
*dentry,
                return -EPERM;
 
        if ((attr->ia_valid & ATTR_SIZE)) {
+               if (mapping_large_folio_support(inode->i_mapping))
+                       return -EOPNOTSUPP;
                if (!f2fs_is_compress_backend_ready(inode) ||
                                IS_DEVICE_ALIASING(inode))
                        return -EOPNOTSUPP;
-- 
2.43.0


_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to