Messages in this thread Patch in this message | | | Date | Mon, 14 Oct 2013 11:28:14 +0200 | From | Krzysztof Mazur <> | Subject | Re: [PATCH] init: fix in-place parameter modification regression |
| |
On Mon, Oct 14, 2013 at 06:06:23PM +1030, Rusty Russell wrote: > Krzysztof Mazur <krzysiek@podlesie.net> writes: > > Before commit 026cee0086fe1df4cf74691cf273062cc769617d > > ("params: <level>_initcall-like kernel parameters") the __setup > > parameter parsing code could modify parameter in the > > static_command_line buffer and such modifications were kept. After > > that commit such modifications are destroyed during per-initcall level > > parameter parsing because the same static_command_line buffer is used > > and only parameters for appropriate initcall level are parsed. > > > > That change broke at least parsing "ubd" parameter in the ubd driver > > when the COW file is used. > > > > Now the separate buffer is used for per-initcall parameter parsing, > > like in parsing early params. > > How about just removing "strcpy(static_command_line, saved_command_line);" > from do_initcall_level altogether? We already initialize it in > setup_command_line(). >
That does not work because the command line is always modified - at least '\0' are added to split strings.
To be sure I tested that with:
diff --git a/kernel/params.c b/kernel/params.c index c00d5b5..606058a 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -96,6 +96,7 @@ static int parse_one(char *param, unsigned int i; int err; + printk("param %d-%d: %s\n", min_level, max_level, param); /* Find parameter */ for (i = 0; i < num_params; i++) { if (parameq(param, params[i].name)) {
And without that strcpy() I get:
[...] param 0-0: ubd0 param 1-1: ubd0 [...]
instead of:
[...] param 0-0: ubd0 param 0-0: ubd1 param 0-0: raid param 0-0: hostfs param 0-0: root param 1-1: ubd0 param 1-1: ubd1 param 1-1: raid param 1-1: hostfs param 1-1: root [...]
I checked that also without udb parameters.
Thanks, Krzysiek
| |