On Sat, Mar 12, 2022 at 01:05:17PM +0900, INAGAKI Hiroshi wrote:
> This patch adds "fstools_use_partlabel" option to partname driver.
> 
> The Linux Kernel supports "root=PARTLABEL=<label>" syntax, but fstools
> doesn't and fail to parse the path to the root device.
> To use this syntax, add the option and find from all block devices.
> 
> Note:
> This change is required for I-O DATA HDL-A/HDL2-A. On they, kernel and
> rootfs are stored in the storage device connected to SATA, port1 or
> port2 and the path to the partition will be assigned dynamically. So
> "root=PARTLABEL=<label>" syntax is required instead of "/dev/sdXN".
> 
> Signed-off-by: INAGAKI Hiroshi <musashino.o...@gmail.com>
> ---
>  libfstools/partname.c | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/libfstools/partname.c b/libfstools/partname.c
> index f59c52e..7e57311 100644
> --- a/libfstools/partname.c
> +++ b/libfstools/partname.c
> @@ -121,6 +121,7 @@ static struct volume *partname_volume_find(char *name)
>       char *rootdev = NULL, *devname, *tmp;
>       int j;
>       bool found = false;
> +     bool use_label = false;
>       glob_t gl;
>  
>       if (get_var_from_file("/proc/cmdline", "fstools_ignore_partname", 
> rootparam, sizeof(rootparam))) {
> @@ -128,12 +129,17 @@ static struct volume *partname_volume_find(char *name)
>                       return NULL;
>       }
>  
> -     if (get_var_from_file("/proc/cmdline", "root", rootparam, 
> sizeof(rootparam))) {
> +     if (get_var_from_file("/proc/cmdline", "fstools_use_partlabel", 
> rootparam, sizeof(rootparam)))
> +             if (!strcmp("1", rootparam))
> +                     use_label = true;
> +
> +     if (get_var_from_file("/proc/cmdline", "root", rootparam, 
> sizeof(rootparam)) &&
> +         !use_label) {

Wouldn't it be easier to use strncmp() to match the PARTLABEL= prefix
in string stored at rootparam? In that case you won't have to introduce
a new 'fstools_use_partlabel' parameter and achieve the same result.

>               rootdev = rootdevname(rootparam);
>               /* find partition on same device as rootfs */
>               snprintf(ueventgstr, sizeof(ueventgstr), "%s/%s/*/uevent", 
> block_dir_name, rootdev);
>       } else {
> -             /* no 'root=' kernel cmdline parameter, find on any block 
> device */
> +             /* no 'root=' kernel cmdline parameter or use_label=true, find 
> on any block device */
>               snprintf(ueventgstr, sizeof(ueventgstr), "%s/*/uevent", 
> block_dir_name);
>       }
>  
> -- 
> 2.34.1.windows.1
> 
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to