bcachefs: Add some missing error messages
authorKent Overstreet <kent.overstreet@gmail.com>
Sat, 4 Jun 2022 18:49:02 +0000 (14:49 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:33 +0000 (17:09 -0400)
bch2_opt_parse() was failing to generate error messages in error path.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/opts.c

index 385451ef865ef086d624b8ddac5d49c509376a79..c4ccb42d7851125f50d1cc77051556e970ef62c2 100644 (file)
@@ -267,20 +267,32 @@ int bch2_opt_parse(struct bch_fs *c,
        switch (opt->type) {
        case BCH_OPT_BOOL:
                ret = kstrtou64(val, 10, res);
-               if (ret < 0)
+               if (ret < 0 || (*res != 0 && *res != 1)) {
+                       if (err)
+                               pr_buf(err, "%s: must be bool",
+                                      opt->attr.name);
                        return ret;
+               }
                break;
        case BCH_OPT_UINT:
                ret = opt->flags & OPT_HUMAN_READABLE
                        ? bch2_strtou64_h(val, res)
                        : kstrtou64(val, 10, res);
-               if (ret < 0)
+               if (ret < 0) {
+                       if (err)
+                               pr_buf(err, "%s: must be a number",
+                                      opt->attr.name);
                        return ret;
+               }
                break;
        case BCH_OPT_STR:
                ret = match_string(opt->choices, -1, val);
-               if (ret < 0)
+               if (ret < 0) {
+                       if (err)
+                               pr_buf(err, "%s: invalid selection",
+                                      opt->attr.name);
                        return ret;
+               }
 
                *res = ret;
                break;
@@ -289,8 +301,12 @@ int bch2_opt_parse(struct bch_fs *c,
                        return 0;
 
                ret = opt->parse(c, val, res);
-               if (ret < 0)
+               if (ret < 0) {
+                       if (err)
+                               pr_buf(err, "%s: parse error",
+                                      opt->attr.name);
                        return ret;
+               }
        }
 
        return bch2_opt_validate(opt, *res, err);