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
This commit is contained in:
Warner Losh 2023-02-16 08:53:15 -07:00
parent 6d1c946e91
commit ccf2121d59

View File

@ -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);