git: e3e2681d0ec2 - main - stand/loader.efi: read zfs bootonce attribute before checking currdev

From: Gleb Smirnoff <glebius_at_FreeBSD.org>
Date: Thu, 08 Jun 2023 18:14:58 UTC
The branch main has been updated by glebius:

URL: https://cgit.FreeBSD.org/src/commit/?id=e3e2681d0ec28d6661fef6da76c9479049e2761c

commit e3e2681d0ec28d6661fef6da76c9479049e2761c
Author:     Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2023-06-08 18:14:45 +0000
Commit:     Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2023-06-08 18:14:45 +0000

    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
---
 stand/efi/loader/main.c | 17 ++++++-----------
 1 file changed, 6 insertions(+), 11 deletions(-)

diff --git a/stand/efi/loader/main.c b/stand/efi/loader/main.c
index 8419331f7a19..872f78ba82b2 100644
--- a/stand/efi/loader/main.c
+++ b/stand/efi/loader/main.c
@@ -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