f2fs: compress: fix to check zstd compress level correctly in mount option
authorChao Yu <chao@kernel.org>
Mon, 12 Feb 2024 16:08:18 +0000 (00:08 +0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 27 Feb 2024 17:41:15 +0000 (09:41 -0800)
f2fs only support to config zstd compress level w/ a positive number due
to layout design, but since commit e0c1b49f5b67 ("lib: zstd: Upgrade to
latest upstream zstd version 1.4.10"), zstd supports negative compress
level, so that zstd_min_clevel() may return a negative number, then w/
below mount option, .compress_level can be configed w/ a negative number,
which is not allowed to f2fs, let's add check condition to avoid it.

mount -o compress_algorithm=zstd:4294967295 /dev/sdx /mnt/f2fs

Fixes: 00e120b5e4b5 ("f2fs: assign default compression level")
Signed-off-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/super.c

index c0688c124aa70dd9d1458af1d9fcc768056e3ff8..867b147eb9577cb3c6bdf6707d6636a2d83a6f7f 100644 (file)
@@ -627,7 +627,7 @@ static int f2fs_set_lz4hc_level(struct f2fs_sb_info *sbi, const char *str)
 #ifdef CONFIG_F2FS_FS_ZSTD
 static int f2fs_set_zstd_level(struct f2fs_sb_info *sbi, const char *str)
 {
-       unsigned int level;
+       int level;
        int len = 4;
 
        if (strlen(str) == len) {
@@ -641,9 +641,15 @@ static int f2fs_set_zstd_level(struct f2fs_sb_info *sbi, const char *str)
                f2fs_info(sbi, "wrong format, e.g. <alg_name>:<compr_level>");
                return -EINVAL;
        }
-       if (kstrtouint(str + 1, 10, &level))
+       if (kstrtoint(str + 1, 10, &level))
                return -EINVAL;
 
+       /* f2fs does not support negative compress level now */
+       if (level < 0) {
+               f2fs_info(sbi, "do not support negative compress level: %d", level);
+               return -ERANGE;
+       }
+
        if (!f2fs_is_compress_level_valid(COMPRESS_ZSTD, level)) {
                f2fs_info(sbi, "invalid zstd compress level: %d", level);
                return -EINVAL;