mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-21 18:27:22 +00:00
stand/loader.efi: read zfs bootonce attribute before checking currdev
First check if bootonce is configured and if it is, then change currdev accordingly and after that do the sanity check. This fixes boot in a situation when ZFS pool doesn't have the "bootfs" property, but has bootonce attribute set. A strange, but legitimate case. Reviewed by: tsoome, imp Differential Revision: https://reviews.freebsd.org/D40388
This commit is contained in:
parent
dfa1982352
commit
e3e2681d0e
|
@ -250,9 +250,9 @@ sanity_check_currdev(void)
|
|||
static bool
|
||||
probe_zfs_currdev(uint64_t guid)
|
||||
{
|
||||
char buf[VDEV_PAD_SIZE];
|
||||
char *devname;
|
||||
struct zfs_devdesc currdev;
|
||||
bool bootable;
|
||||
|
||||
currdev.dd.d_dev = &zfs_dev;
|
||||
currdev.dd.d_unit = 0;
|
||||
|
@ -262,19 +262,14 @@ probe_zfs_currdev(uint64_t guid)
|
|||
devname = devformat(&currdev.dd);
|
||||
init_zfs_boot_options(devname);
|
||||
|
||||
bootable = sanity_check_currdev();
|
||||
if (bootable) {
|
||||
char buf[VDEV_PAD_SIZE];
|
||||
|
||||
if (zfs_get_bootonce(&currdev, OS_BOOTONCE, buf, sizeof(buf)) == 0) {
|
||||
printf("zfs bootonce: %s\n", buf);
|
||||
set_currdev(buf);
|
||||
setenv("zfs-bootonce", buf, 1);
|
||||
}
|
||||
if (zfs_get_bootonce(&currdev, OS_BOOTONCE, buf, sizeof(buf)) == 0) {
|
||||
printf("zfs bootonce: %s\n", buf);
|
||||
set_currdev(buf);
|
||||
setenv("zfs-bootonce", buf, 1);
|
||||
(void)zfs_attach_nvstore(&currdev);
|
||||
}
|
||||
|
||||
return (bootable);
|
||||
return (sanity_check_currdev());
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in a new issue