LGTM. Reviewed-by: Anand Jain anand.jain@oracle.com
While we are on this topic- Not all valid mount options get printed either. I sent a patch a long time back [1] to fix it. If there is enough interest, I could revive it.
[1] [PATCH v2] btrfs: add mount umount logs
On 6/6/22 16:38, David Sterba wrote:
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... CC: stable@vger.kernel.org # 4.9+ Signed-off-by: David Sterba dsterba@suse.com
fs/btrfs/super.c | 39 ++++++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-)
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c index d8e2eac0417e..719dda57dc7a 100644 --- a/fs/btrfs/super.c +++ b/fs/btrfs/super.c @@ -764,6 +764,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; }
@@ -822,8 +824,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; }
@@ -884,8 +889,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);
@@ -902,6 +910,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; }
@@ -934,6 +944,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; }
@@ -1015,8 +1027,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);
@@ -1031,13 +1047,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; }
@@ -1045,8 +1063,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",
@@ -1060,8 +1082,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;
#ifdef CONFIG_BTRFS_DEBUG case Opt_fragment_all:} break;