f2fs: make file immutable even if releasing zero compression block
authorDaeho Jeong <daehojeong@google.com>
Thu, 30 Jul 2020 05:09:28 +0000 (14:09 +0900)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 4 Aug 2020 01:05:03 +0000 (18:05 -0700)
When we use F2FS_IOC_RELEASE_COMPRESS_BLOCKS ioctl, if we can't find
any compressed blocks in the file even with large file size, the
ioctl just ends up without changing the file's status as immutable.
It makes the user, who expects that the file is immutable when it
returns successfully, confused.

Signed-off-by: Daeho Jeong <daehojeong@google.com>
Reviewed-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/file.c

index cc7f5670390fd1294d846b5a86c1d9fc7271fbbb..8a422400e824d71ac3a47e473ab38b83fc002e05 100644 (file)
@@ -3535,14 +3535,14 @@ static int f2fs_release_compress_blocks(struct file *filp, unsigned long arg)
        if (ret)
                goto out;
 
-       if (!F2FS_I(inode)->i_compr_blocks)
-               goto out;
-
        F2FS_I(inode)->i_flags |= F2FS_IMMUTABLE_FL;
        f2fs_set_inode_flags(inode);
        inode->i_ctime = current_time(inode);
        f2fs_mark_inode_dirty_sync(inode, true);
 
+       if (!F2FS_I(inode)->i_compr_blocks)
+               goto out;
+
        down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
        down_write(&F2FS_I(inode)->i_mmap_sem);