Whamcloud - gitweb
LU-7796 utils: print error with valueless lctl set_param
[fs/lustre-release.git] / lustre / utils / lustre_cfg.c
index 7e5f0c0..f0c5d5d 100644 (file)
@@ -1405,20 +1405,11 @@ int jt_lcfg_setparam(int argc, char **argv)
 
        for (i = index; i < argc; i++) {
                int rc2;
+               path = NULL;
 
                value = strchr(argv[i], '=');
                if (value != NULL) {
                        /* format: set_param a=b */
-                       if (path != NULL) {
-                               /* broken value "set_param a b=c" */
-                               fprintf(stderr,
-                                       "error: %s: setting %s=%s: bad value\n",
-                                       jt_cmdname(argv[0]), path, argv[i]);
-                               if (rc == 0)
-                                       rc = EINVAL;
-                               path = NULL;
-                               break;
-                       }
                        *value = '\0';
                        value++;
                        path = argv[i];
@@ -1427,14 +1418,20 @@ int jt_lcfg_setparam(int argc, char **argv)
                                        "error: %s: setting %s: no value\n",
                                        jt_cmdname(argv[0]), path);
                                if (rc == 0)
-                                       rc = EINVAL;
+                                       rc = -EINVAL;
                                continue;
                        }
                } else {
                        /* format: set_param a b */
-                       if (path == NULL) {
-                               path = argv[i];
-                               continue;
+                       path = argv[i];
+                       i++;
+                       if (i >= argc) {
+                               fprintf(stderr,
+                                       "error: %s: setting %s: no value\n",
+                                       jt_cmdname(argv[0]), path);
+                               if (rc == 0)
+                                       rc = -EINVAL;
+                               break;
                        } else {
                                value = argv[i];
                        }
@@ -1449,11 +1446,18 @@ int jt_lcfg_setparam(int argc, char **argv)
                        continue;
                }
 
+               /* A value containing '=' is indicative of user error, e.g.:
+                *     lctl set_param param1 param2=value2
+                *     lctl set_param param1=param2=value2
+                */
+               if (strchr(value, '=') != NULL)
+                       fprintf(stderr,
+                               "warning: %s: value '%s' contains '='\n",
+                               jt_cmdname(argv[0]), value);
+
                rc2 = param_display(&popt, path, value, SET_PARAM);
                if (rc == 0)
                        rc = rc2;
-               path = NULL;
-               value = NULL;
        }
 
        return rc;