mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 12:57:53 +00:00
f2fs: compress: fix to avoid redundant compress extension
With below script, redundant compress extension will be parsed and added by parse_options(), because parse_options() doesn't check whether the extension is existed or not, fix it. 1. mount -t f2fs -o compress_extension=so /dev/vdb /mnt/f2fs 2. mount -t f2fs -o remount,compress_extension=so /mnt/f2fs 3. mount|grep f2fs /dev/vdb on /mnt/f2fs type f2fs (...,compress_extension=so,compress_extension=so,...) Fixes:4c8ff7095b
("f2fs: support data compression") Fixes:151b1982be
("f2fs: compress: add nocompress extensions support") Signed-off-by: Chao Yu <chao@kernel.org> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
2aaea533bf
commit
7e1b150fec
1 changed files with 33 additions and 0 deletions
|
@ -547,6 +547,29 @@ static int f2fs_set_test_dummy_encryption(struct super_block *sb,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_F2FS_FS_COMPRESSION
|
#ifdef CONFIG_F2FS_FS_COMPRESSION
|
||||||
|
static bool is_compress_extension_exist(struct f2fs_sb_info *sbi,
|
||||||
|
const char *new_ext, bool is_ext)
|
||||||
|
{
|
||||||
|
unsigned char (*ext)[F2FS_EXTENSION_LEN];
|
||||||
|
int ext_cnt;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (is_ext) {
|
||||||
|
ext = F2FS_OPTION(sbi).extensions;
|
||||||
|
ext_cnt = F2FS_OPTION(sbi).compress_ext_cnt;
|
||||||
|
} else {
|
||||||
|
ext = F2FS_OPTION(sbi).noextensions;
|
||||||
|
ext_cnt = F2FS_OPTION(sbi).nocompress_ext_cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < ext_cnt; i++) {
|
||||||
|
if (!strcasecmp(new_ext, ext[i]))
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 1. The same extension name cannot not appear in both compress and non-compress extension
|
* 1. The same extension name cannot not appear in both compress and non-compress extension
|
||||||
* at the same time.
|
* at the same time.
|
||||||
|
@ -1149,6 +1172,11 @@ static int parse_options(struct super_block *sb, char *options, bool is_remount)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_compress_extension_exist(sbi, name, true)) {
|
||||||
|
kfree(name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
strcpy(ext[ext_cnt], name);
|
strcpy(ext[ext_cnt], name);
|
||||||
F2FS_OPTION(sbi).compress_ext_cnt++;
|
F2FS_OPTION(sbi).compress_ext_cnt++;
|
||||||
kfree(name);
|
kfree(name);
|
||||||
|
@ -1173,6 +1201,11 @@ static int parse_options(struct super_block *sb, char *options, bool is_remount)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_compress_extension_exist(sbi, name, false)) {
|
||||||
|
kfree(name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
strcpy(noext[noext_cnt], name);
|
strcpy(noext[noext_cnt], name);
|
||||||
F2FS_OPTION(sbi).nocompress_ext_cnt++;
|
F2FS_OPTION(sbi).nocompress_ext_cnt++;
|
||||||
kfree(name);
|
kfree(name);
|
||||||
|
|
Loading…
Reference in a new issue