diff --git a/0001-ofdisk-improve-boot-time-by-lookup-boot-disk-first.patch b/0001-ofdisk-improve-boot-time-by-lookup-boot-disk-first.patch new file mode 100644 index 0000000..df28bfe --- /dev/null +++ b/0001-ofdisk-improve-boot-time-by-lookup-boot-disk-first.patch @@ -0,0 +1,63 @@ +From b0f9dcabe96e5689ecfba9b6abcd27e685eabd48 Mon Sep 17 00:00:00 2001 +From: Michael Chang +Date: Wed, 11 May 2022 09:56:11 -0400 +Subject: [PATCH] ofdisk: improve boot time by lookup boot disk first + +While booting lvm, grub will try to build up logical volumes via hooks +to disk iteration where on-disk metadata can be read and parsed. However +the process can become very slow on multipath as reachable disks are +duplicated by multiple I/O paths and they all get inspected. + +Fortunately grub allows lvm to be lazy binding and opportunistic that +root volume can be created when it's needed using a smaller set of +discovered disks. The disk iteration can also be controlled by pull +methods to only returning specified disks. That said we may be able to +take advantage of existing design to cause less overhead in lvm +construction. + +This patch will return boot disks in OpenFirmware so they can be used +first. If lvm managed to create root volume out of those boot disks then +it is all very nice as they are readily available. Otherwise disk +scanning will be performed to present all discoverable disks to grub as +what it was done in the past. The result maybe again time consuming but +we have nothing to lose here. + +Signed-off-by: Michael Chang +--- + grub-core/disk/ieee1275/ofdisk.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c +index 258a6e3891..410f4b849f 100644 +--- a/grub-core/disk/ieee1275/ofdisk.c ++++ b/grub-core/disk/ieee1275/ofdisk.c +@@ -491,10 +491,11 @@ grub_ofdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + { + unsigned i; + +- if (pull != GRUB_DISK_PULL_NONE) ++ if (pull > GRUB_DISK_PULL_REMOVABLE) + return 0; + +- scan (); ++ if (pull == GRUB_DISK_PULL_REMOVABLE) ++ scan (); + + for (i = 0; i < ARRAY_SIZE (ofdisk_hash); i++) + { +@@ -532,6 +533,12 @@ grub_ofdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data, + if (!ent->is_boot && ent->is_removable) + continue; + ++ if (pull == GRUB_DISK_PULL_NONE && !ent->is_boot) ++ continue; ++ ++ if (pull == GRUB_DISK_PULL_REMOVABLE && ent->is_boot) ++ continue; ++ + if (hook (ent->grub_shortest, hook_data)) + return 1; + } +-- +2.34.1 + diff --git a/grub2.changes b/grub2.changes index 7100def..ed5c621 100644 --- a/grub2.changes +++ b/grub2.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Tue May 31 04:41:44 UTC 2022 - Michael Chang + +- Use boot disks in OpenFirmware, fixing regression caused by + 0001-ieee1275-implement-FCP-methods-for-WWPN-and-LUNs.patch, when + the root LV is completely in the boot LUN (bsc#1197948) + * 0001-ofdisk-improve-boot-time-by-lookup-boot-disk-first.patch + +------------------------------------------------------------------- +Thu May 26 10:10:56 UTC 2022 - Michael Chang + +- Fix error message in displaying help on bootable snapshot (bsc#1199609) + ------------------------------------------------------------------- Tue May 17 10:46:38 UTC 2022 - Michael Chang diff --git a/grub2.spec b/grub2.spec index f3f04fc..54ed3c1 100644 --- a/grub2.spec +++ b/grub2.spec @@ -374,6 +374,7 @@ Patch848: 0001-grub-probe-Deduplicate-probed-partmap-output.patch Patch849: 0001-powerpc-do-CAS-in-a-more-compatible-way.patch Patch850: 0001-Fix-infinite-boot-loop-on-headless-system-in-qemu.patch Patch851: 0001-libc-config-merge-from-glibc.patch +Patch852: 0001-ofdisk-improve-boot-time-by-lookup-boot-disk-first.patch Requires: gettext-runtime %if 0%{?suse_version} >= 1140 @@ -644,7 +645,7 @@ CD_MODULES="all_video boot cat configfile echo true \ PXE_MODULES="tftp http" CRYPTO_MODULES="luks gcry_rijndael gcry_sha1 gcry_sha256" %ifarch %{efi} -CD_MODULES="${CD_MODULES} chain efifwsetup efinet" +CD_MODULES="${CD_MODULES} chain efifwsetup efinet read" PXE_MODULES="${PXE_MODULES} efinet" %else CD_MODULES="${CD_MODULES} net"