Re: [PATCH] btrfs: add error messages to all unrecognized mount options

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




LGTM.
Reviewed-by: Anand Jain <anand.jain@xxxxxxxxxx>

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@xxxxxx/
CC: stable@xxxxxxxxxxxxxxx # 4.9+
Signed-off-by: David Sterba <dsterba@xxxxxxxx>
---
  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;
+			}
  			break;
  #ifdef CONFIG_BTRFS_DEBUG
  		case Opt_fragment_all:




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux