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