f2fs: compress: fix to disallow enabling compress on non-empty file
authorChao Yu <yuchao0@huawei.com>
Fri, 18 Sep 2020 03:03:49 +0000 (11:03 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 29 Sep 2020 16:16:36 +0000 (09:16 -0700)
Compressed inode and normal inode has different layout, so we should
disallow enabling compress on non-empty file to avoid race condition
during inode .i_addr array parsing and updating.

Signed-off-by: Chao Yu <yuchao0@huawei.com>
[Jaegeuk Kim: Fix missing condition]
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/file.c

index 58e464c..62efbf1 100644 (file)
@@ -1821,6 +1821,8 @@ static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask)
                if (iflags & F2FS_COMPR_FL) {
                        if (!f2fs_may_compress(inode))
                                return -EINVAL;
+                       if (S_ISREG(inode->i_mode) && inode->i_size)
+                               return -EINVAL;
 
                        set_compress_context(inode);
                }