}
run_test 401b "Verify 'lctl {get,set}_param' continue after error"
+test_401c() {
+ local jobid_var_old=$($LCTL get_param -n jobid_var)
+ local jobid_var_new
+
+ $LCTL set_param jobid_var= &&
+ error "no error returned for 'set_param a='"
+
+ jobid_var_new=$($LCTL get_param -n jobid_var)
+ [[ "$jobid_var_old" == "$jobid_var_new" ]] ||
+ error "jobid_var was changed by setting without value"
+
+ $LCTL set_param jobid_var &&
+ error "no error returned for 'set_param a'"
+
+ jobid_var_new=$($LCTL get_param -n jobid_var)
+ [[ "$jobid_var_old" == "$jobid_var_new" ]] ||
+ error "jobid_var was changed by setting without value"
+}
+run_test 401c "Verify 'lctl set_param' without value fails in either format."
+
+test_401d() {
+ local jobid_var_old=$($LCTL get_param -n jobid_var)
+ local jobid_var_new
+ local new_value="foo=bar"
+
+ $LCTL set_param jobid_var=$new_value ||
+ error "'set_param a=b' did not accept a value containing '='"
+
+ jobid_var_new=$($LCTL get_param -n jobid_var)
+ [[ "$jobid_var_new" == "$new_value" ]] ||
+ error "'set_param a=b' failed on a value containing '='"
+
+ # Reset the jobid_var to test the other format
+ $LCTL set_param jobid_var=$jobid_var_old
+ jobid_var_new=$($LCTL get_param -n jobid_var)
+ [[ "$jobid_var_new" == "$jobid_var_old" ]] ||
+ error "failed to reset jobid_var"
+
+ $LCTL set_param jobid_var $new_value ||
+ error "'set_param a b' did not accept a value containing '='"
+
+ jobid_var_new=$($LCTL get_param -n jobid_var)
+ [[ "$jobid_var_new" == "$new_value" ]] ||
+ error "'set_param a b' failed on a value containing '='"
+
+ $LCTL set_param jobid_var $jobid_var_old
+ jobid_var_new=$($LCTL get_param -n jobid_var)
+ [[ "$jobid_var_new" == "$jobid_var_old" ]] ||
+ error "failed to reset jobid_var"
+}
+run_test 401d "Verify 'lctl set_param' accepts values containing '='"
+
test_402() {
$LFS setdirstripe -i 0 $DIR/$tdir || error "setdirstripe -i 0 failed"
#define OBD_FAIL_MDS_FLD_LOOKUP 0x15c
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];
"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];
}
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;