diff options
| author | Chris Zankel <chris@zankel.net> | 2016-01-21 05:16:13 +0000 |
|---|---|---|
| committer | Chris Zankel <chris@zankel.net> | 2016-01-21 05:16:13 +0000 |
| commit | d1208404dd477c142680437137c9996b95bfd508 (patch) | |
| tree | 0cba53f59f487c0de2b1a0d9fb1b11ae27de96ec /kernel/params.c | |
| parent | afaa7c542cc9c4d8a99ba252a8ea5e8bc7c897e2 (diff) | |
| parent | afd2ff9b7e1b367172f18ba7f693dfb62bdcb2dc (diff) | |
| download | linux-d1208404dd477c142680437137c9996b95bfd508.tar.gz linux-d1208404dd477c142680437137c9996b95bfd508.tar.bz2 linux-d1208404dd477c142680437137c9996b95bfd508.zip | |
Merge tag 'v4.4'
Linux 4.4
Diffstat (limited to 'kernel/params.c')
| -rw-r--r-- | kernel/params.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/kernel/params.c b/kernel/params.c index b6554aa71094..a6d6149c0fe6 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -223,7 +223,7 @@ char *parse_args(const char *doing, int (*unknown)(char *param, char *val, const char *doing, void *arg)) { - char *param, *val; + char *param, *val, *err = NULL; /* Chew leading spaces */ args = skip_spaces(args); @@ -238,7 +238,7 @@ char *parse_args(const char *doing, args = next_arg(args, ¶m, &val); /* Stop at -- */ if (!val && strcmp(param, "--") == 0) - return args; + return err ?: args; irq_was_disabled = irqs_disabled(); ret = parse_one(param, val, doing, params, num, min_level, max_level, arg, unknown); @@ -247,24 +247,25 @@ char *parse_args(const char *doing, doing, param); switch (ret) { + case 0: + continue; case -ENOENT: pr_err("%s: Unknown parameter `%s'\n", doing, param); - return ERR_PTR(ret); + break; case -ENOSPC: pr_err("%s: `%s' too large for parameter `%s'\n", doing, val ?: "", param); - return ERR_PTR(ret); - case 0: break; default: pr_err("%s: `%s' invalid for parameter `%s'\n", doing, val ?: "", param); - return ERR_PTR(ret); + break; } + + err = ERR_PTR(ret); } - /* All parsed OK. */ - return NULL; + return err; } /* Lazy bastard, eh? */ @@ -325,10 +326,11 @@ int param_get_charp(char *buffer, const struct kernel_param *kp) } EXPORT_SYMBOL(param_get_charp); -static void param_free_charp(void *arg) +void param_free_charp(void *arg) { maybe_kfree_parameter(*((char **)arg)); } +EXPORT_SYMBOL(param_free_charp); const struct kernel_param_ops param_ops_charp = { .set = param_set_charp, |
