f2fs: do not allow to defragment files have FI_COMPRESS_RELEASED

Message ID 20230425151126.50566-1-frank.li@vivo.com
State New
Headers
Series f2fs: do not allow to defragment files have FI_COMPRESS_RELEASED |

Commit Message

李扬韬 April 25, 2023, 3:11 p.m. UTC
  If a file has FI_COMPRESS_RELEASED, all writes for it should not be
allowed.

Fixes: 5fdb322ff2c2 ("f2fs: add F2FS_IOC_DECOMPRESS_FILE and F2FS_IOC_COMPRESS_FILE")
Signed-off-by: Qi Han <hanqi@vivo.com>
Signed-off-by: Yangtao Li <frank.li@vivo.com>
---
 fs/f2fs/file.c | 3 +++
 1 file changed, 3 insertions(+)
  

Comments

Chao Yu April 27, 2023, 9:38 a.m. UTC | #1
On 2023/4/25 23:11, Yangtao Li wrote:
> If a file has FI_COMPRESS_RELEASED, all writes for it should not be
> allowed.
> 
> Fixes: 5fdb322ff2c2 ("f2fs: add F2FS_IOC_DECOMPRESS_FILE and F2FS_IOC_COMPRESS_FILE")
> Signed-off-by: Qi Han <hanqi@vivo.com>
> Signed-off-by: Yangtao Li <frank.li@vivo.com>
> ---
>   fs/f2fs/file.c | 3 +++
>   1 file changed, 3 insertions(+)
> 
> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
> index 9c9c3f660e01..c21d6a829c4a 100644
> --- a/fs/f2fs/file.c
> +++ b/fs/f2fs/file.c
> @@ -2734,6 +2734,9 @@ static int f2fs_ioc_defragment(struct file *filp, unsigned long arg)
>   	if (f2fs_readonly(sbi->sb))
>   		return -EROFS;
>   
> +	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED))
> +		return -EINVAL;

This flag should be checked w/ inode lock.

Thanks,

> +
>   	if (copy_from_user(&range, (struct f2fs_defragment __user *)arg,
>   							sizeof(range)))
>   		return -EFAULT;
  

Patch

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 9c9c3f660e01..c21d6a829c4a 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -2734,6 +2734,9 @@  static int f2fs_ioc_defragment(struct file *filp, unsigned long arg)
 	if (f2fs_readonly(sbi->sb))
 		return -EROFS;
 
+	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED))
+		return -EINVAL;
+
 	if (copy_from_user(&range, (struct f2fs_defragment __user *)arg,
 							sizeof(range)))
 		return -EFAULT;