Getting root device adn root kernel options seperatily any combining them in this function instead of getting the full string from the helper functions. This is in preperation for replacing the root= string in the kernel commandline with something defined during runtime.
Signed-off-by: Fabian Pflug <[email protected]> --- restore warning for PARTUUID common/bootm.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/common/bootm.c b/common/bootm.c index 17792b2a1d..562e469552 100644 --- a/common/bootm.c +++ b/common/bootm.c @@ -4,6 +4,7 @@ #include <bootm.h> #include <bootm-overrides.h> #include <fs.h> +#include <fcntl.h> #include <malloc.h> #include <memory.h> #include <block.h> @@ -841,33 +842,40 @@ int bootm_boot(struct bootm_data *bootm_data) } if (bootm_data->appendroot) { - char *rootarg; + char *root = NULL; + char *rootopts = NULL; if (bootm_data->root_dev) { const char *root_dev_name = devpath_to_name(bootm_data->root_dev); struct cdev *root_cdev = cdev_open_by_name(root_dev_name, O_RDONLY); + int err; - rootarg = cdev_get_linux_rootarg(root_cdev); - if (!rootarg) { - rootarg = ERR_PTR(-EINVAL); + err = cdev_get_linux_root_and_opts(root_cdev, &root, &rootopts); + if (IS_ERR(err)) { if (!root_cdev) - pr_err("no cdev found for %s, cannot set root= option\n", - root_dev_name); + pr_err("no cdev found for %s, cannot set root= option\n", root_dev_name); else if (!root_cdev->partuuid[0]) - pr_err("%s doesn't have a PARTUUID, cannot set root= option\n", - root_dev_name); + pr_err("%s doesn't have a PARTUUID, cannot set root= option\n", root_dev_name); + else + pr_err("could not determine root= from %s\n", root_dev_name); } if (root_cdev) cdev_close(root_cdev); } else { - rootarg = path_get_linux_rootarg(data->os_file); + struct fs_device *fsdev = get_fsdevice_by_path(AT_FDCWD, data->os_file); + if (fsdev) + fsdev_get_linux_root_options(fsdev, &root, &rootopts); + else + pr_err("no fsdevice under path: %s\n", data->os_file); } - if (IS_ERR(rootarg)) { + if (!root) { pr_err("Failed to append kernel cmdline parameter 'root='\n"); } else { + char *rootarg; + rootarg = format_root_bootarg("root", root, rootopts); pr_info("Adding \"%s\" to Kernel commandline\n", rootarg); globalvar_add_simple("linux.bootargs.bootm.appendroot", rootarg); -- 2.47.3
