btrfs: add error messages to all unrecognized mount options
Almost none of the errors stemming from a valid mount option but wrong value prints a descriptive message which would help to identify why mount failed. Like in the linked report: $ uname -r v4.19 $ mount -o compress=zstd /dev/sdb /mnt mount: /mnt: wrong fs type, bad option, bad superblock on /dev/sdb, missing codepage or helper program, or other error. $ dmesg ... BTRFS error (device sdb): open_ctree failed Errors caused by memory allocation failures are left out as it's not a user error so reporting that would be confusing. Link: https://lore.kernel.org/linux-btrfs/9c3fec36-fc61-3a33-4977-a7e207c3fa4e@gmx.de/ CC: stable@vger.kernel.org # 4.9+ Reviewed-by: Qu Wenruo <wqu@suse.com> Reviewed-by: Nikolay Borisov <nborisov@suse.com> Reviewed-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Родитель
0591f04036
Коммит
e3a4167c88
|
@ -763,6 +763,8 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
compress_force = false;
|
||||
no_compress++;
|
||||
} else {
|
||||
btrfs_err(info, "unrecognized compression value %s",
|
||||
args[0].from);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
@ -821,8 +823,11 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
case Opt_thread_pool:
|
||||
ret = match_int(&args[0], &intarg);
|
||||
if (ret) {
|
||||
btrfs_err(info, "unrecognized thread_pool value %s",
|
||||
args[0].from);
|
||||
goto out;
|
||||
} else if (intarg == 0) {
|
||||
btrfs_err(info, "invalid value 0 for thread_pool");
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
@ -883,8 +888,11 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
break;
|
||||
case Opt_ratio:
|
||||
ret = match_int(&args[0], &intarg);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
btrfs_err(info, "unrecognized metadata_ratio value %s",
|
||||
args[0].from);
|
||||
goto out;
|
||||
}
|
||||
info->metadata_ratio = intarg;
|
||||
btrfs_info(info, "metadata ratio %u",
|
||||
info->metadata_ratio);
|
||||
|
@ -901,6 +909,8 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
btrfs_set_and_info(info, DISCARD_ASYNC,
|
||||
"turning on async discard");
|
||||
} else {
|
||||
btrfs_err(info, "unrecognized discard mode value %s",
|
||||
args[0].from);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
@ -933,6 +943,8 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
btrfs_set_and_info(info, FREE_SPACE_TREE,
|
||||
"enabling free space tree");
|
||||
} else {
|
||||
btrfs_err(info, "unrecognized space_cache value %s",
|
||||
args[0].from);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
@ -1014,8 +1026,12 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
break;
|
||||
case Opt_check_integrity_print_mask:
|
||||
ret = match_int(&args[0], &intarg);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
btrfs_err(info,
|
||||
"unrecognized check_integrity_print_mask value %s",
|
||||
args[0].from);
|
||||
goto out;
|
||||
}
|
||||
info->check_integrity_print_mask = intarg;
|
||||
btrfs_info(info, "check_integrity_print_mask 0x%x",
|
||||
info->check_integrity_print_mask);
|
||||
|
@ -1030,13 +1046,15 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
goto out;
|
||||
#endif
|
||||
case Opt_fatal_errors:
|
||||
if (strcmp(args[0].from, "panic") == 0)
|
||||
if (strcmp(args[0].from, "panic") == 0) {
|
||||
btrfs_set_opt(info->mount_opt,
|
||||
PANIC_ON_FATAL_ERROR);
|
||||
else if (strcmp(args[0].from, "bug") == 0)
|
||||
} else if (strcmp(args[0].from, "bug") == 0) {
|
||||
btrfs_clear_opt(info->mount_opt,
|
||||
PANIC_ON_FATAL_ERROR);
|
||||
else {
|
||||
} else {
|
||||
btrfs_err(info, "unrecognized fatal_errors value %s",
|
||||
args[0].from);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
@ -1044,8 +1062,12 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
case Opt_commit_interval:
|
||||
intarg = 0;
|
||||
ret = match_int(&args[0], &intarg);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
btrfs_err(info, "unrecognized commit_interval value %s",
|
||||
args[0].from);
|
||||
ret = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
if (intarg == 0) {
|
||||
btrfs_info(info,
|
||||
"using default commit interval %us",
|
||||
|
@ -1059,8 +1081,11 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
|
|||
break;
|
||||
case Opt_rescue:
|
||||
ret = parse_rescue_options(info, args[0].from);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
btrfs_err(info, "unrecognized rescue value %s",
|
||||
args[0].from);
|
||||
goto out;
|
||||
}
|
||||
break;
|
||||
#ifdef CONFIG_BTRFS_DEBUG
|
||||
case Opt_fragment_all:
|
||||
|
|
Загрузка…
Ссылка в новой задаче