diff options
author | Christian Marangi <ansuelsmth@gmail.com> | 2023-01-22 16:43:35 +0100 |
---|---|---|
committer | Christian Marangi <ansuelsmth@gmail.com> | 2023-01-22 17:24:05 +0100 |
commit | 1ea5855e980cd88766dd9f615e78e7dd6edfbb74 (patch) | |
tree | 26bc98ce8adec426856e5d66c8a7b0c9975e3efe | |
parent | e9b59f063bb333df6d58bf434554753d123a713f (diff) | |
download | fstools-1ea5855e980cd88766dd9f615e78e7dd6edfbb74.tar.gz |
partname: Introduce fstools_partname_fallback_scan option
Some device may contains a GPT partition named rootfs_data that may
not be suitable.
To save from regression with old implementation that doesn't use
fstools_ignore_partname to explicitly say that that parname scan
should be ignored, make explicit that scanning each partition should
be done by providing fstools_partname_fallback_scan=1 and skip partname
scan in every other case.
Fixes: e9b59f063bb3 ("partname: Ignore root=PARTUUID...")
Tested-by: Dirk Buchwalder <buchwalder@posteo.de>
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
-rw-r--r-- | libfstools/partname.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/libfstools/partname.c b/libfstools/partname.c index 9c27015..f42322a 100644 --- a/libfstools/partname.c +++ b/libfstools/partname.c @@ -133,6 +133,19 @@ static struct volume *partname_volume_find(char *name) /* find partition on same device as rootfs */ snprintf(ueventgstr, sizeof(ueventgstr), "%s/%s/*/uevent", block_dir_name, rootdev); } else { + /* + * Some device may contains a GPT partition named rootfs_data that may not be suitable. + * To save from regression with old implementation that doesn't use fstools_ignore_partname to + * explicitly say that that parname scan should be ignored, make explicit that scanning each + * partition should be done by providing fstools_partname_fallback_scan=1 and skip partname scan + * in every other case. + */ + if (!get_var_from_file("/proc/cmdline", "fstools_partname_fallback_scan", rootparam, sizeof(rootparam))) + return NULL; + + if (!strcmp("1", rootparam)) + return NULL; + /* no useful 'root=' kernel cmdline parameter, find on any block device */ snprintf(ueventgstr, sizeof(ueventgstr), "%s/*/uevent", block_dir_name); } |