f2fs: compress: fix to check compress flag w/ .i_sem lock
[ Upstream commit ea59b12ac69774c08aa95cd5b6100700ea0cce97 ] It needs to check compress flag w/ .i_sem lock, otherwise, compressed inode may be disabled after the check condition, it's not needed to set compress option on non-compress inode. Fixes: e1e8debec656 ("f2fs: add F2FS_IOC_SET_COMPRESS_OPTION ioctl") Signed-off-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
26e177cffc
commit
41e8018b45
@ -3989,16 +3989,20 @@ static int f2fs_ioc_set_compress_option(struct file *filp, unsigned long arg)
|
||||
sizeof(option)))
|
||||
return -EFAULT;
|
||||
|
||||
if (!f2fs_compressed_file(inode) ||
|
||||
option.log_cluster_size < MIN_COMPRESS_LOG_SIZE ||
|
||||
option.log_cluster_size > MAX_COMPRESS_LOG_SIZE ||
|
||||
option.algorithm >= COMPRESS_MAX)
|
||||
if (option.log_cluster_size < MIN_COMPRESS_LOG_SIZE ||
|
||||
option.log_cluster_size > MAX_COMPRESS_LOG_SIZE ||
|
||||
option.algorithm >= COMPRESS_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
file_start_write(filp);
|
||||
inode_lock(inode);
|
||||
|
||||
f2fs_down_write(&F2FS_I(inode)->i_sem);
|
||||
if (!f2fs_compressed_file(inode)) {
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (f2fs_is_mmap_file(inode) || get_dirty_pages(inode)) {
|
||||
ret = -EBUSY;
|
||||
goto out;
|
||||
|
Loading…
x
Reference in New Issue
Block a user