aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWarner Losh <imp@FreeBSD.org>2023-02-16 16:36:03 +0000
committerWarner Losh <imp@FreeBSD.org>2023-02-19 00:46:57 +0000
commit9ad4c0468f1924cf7bdb9830bb781de9ca095c61 (patch)
treee3345035cc6e89cee5c70de57ef7670d99fbb382
parente9296dc1bcd21cd9d719389cd04235ce4513e84d (diff)
downloadsrc-9ad4c0468f1924cf7bdb9830bb781de9ca095c61.tar.gz
src-9ad4c0468f1924cf7bdb9830bb781de9ca095c61.zip
efivar: Try harder to find label's efimedia
If there's no efimedia attribute on the provider, and the provider's a glabel, then find the 'parent' geom. In this case, the provider's name is label-type/name, but the geom's label will that of the underlying device (eg ada0p1). If it is, recurisvely call find_geom_efimedia with the geom's name, which shuold have the efimedia attribute. Sponsored by: Netflix Reviewed by: corvink, manu, asomers Differential Revision: https://reviews.freebsd.org/D38614 (cherry picked from commit ccf2121d59ac51e1a0287d75262d48018d09cad6)
-rw-r--r--lib/libefivar/efivar-dp-xlate.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/libefivar/efivar-dp-xlate.c b/lib/libefivar/efivar-dp-xlate.c
index 1b30d1dfb143..effc8a2de475 100644
--- a/lib/libefivar/efivar-dp-xlate.c
+++ b/lib/libefivar/efivar-dp-xlate.c
@@ -527,6 +527,15 @@ find_geom_efimedia(struct gmesh *mesh, const char *dev)
if (pp == NULL)
return (NULL);
efimedia = geom_pp_attr(mesh, pp, "efimedia");
+
+ /*
+ * If this device doesn't hav an efimedia attribute, see if it is a
+ * glabel node, and if so look for the underlying provider to get the
+ * efimedia attribute from.
+ */
+ if (efimedia == NULL &&
+ strcmp(pp->lg_geom->lg_class->lg_name, G_LABEL) == 0)
+ efimedia = find_geom_efimedia(mesh, pp->lg_geom->lg_name);
if (efimedia == NULL)
return (NULL);
return strdup(efimedia);