f6e916
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
f6e916
From: Diego Domingos <diegdo@br.ibm.com>
f6e916
Date: Thu, 24 Mar 2022 13:14:42 -0400
f6e916
Subject: [PATCH] make ofdisk_retries optional
f6e916
f6e916
The feature Retry on Fail added to GRUB can cause a LPM to take
f6e916
longer if the SAN is slow.
f6e916
f6e916
When a LPM to external site occur, the path of the disk can change
f6e916
and thus the disk search function on grub can take some time since
f6e916
it is used as a hint. This can cause the Retry on Fail feature to
f6e916
try to access the disk 20x times (since this is hardcoded number)
f6e916
and, if the SAN is slow, the boot time can increase a lot.
f6e916
In some situations not acceptable.
f6e916
f6e916
The following patch enables a configuration at user space of the
f6e916
maximum number of retries we want for this feature.
f6e916
f6e916
The variable ofdisk_retries should be set using grub2-editenv
f6e916
and will be checked by retry function. If the variable is not set,
f6e916
so the default number of retries will be used instead.
f6e916
---
f6e916
 include/grub/ieee1275/ofdisk.h | 7 ++++++-
f6e916
 1 file changed, 6 insertions(+), 1 deletion(-)
f6e916
f6e916
diff --git a/include/grub/ieee1275/ofdisk.h b/include/grub/ieee1275/ofdisk.h
f6e916
index 7d2d540930..0074d55eee 100644
f6e916
--- a/include/grub/ieee1275/ofdisk.h
f6e916
+++ b/include/grub/ieee1275/ofdisk.h
f6e916
@@ -25,7 +25,12 @@ extern void grub_ofdisk_fini (void);
f6e916
 #define MAX_RETRIES 20
f6e916
 
f6e916
 
f6e916
-#define RETRY_IEEE1275_OFDISK_OPEN(device, last_ihandle) unsigned retry_i=0;for(retry_i=0; retry_i < MAX_RETRIES; retry_i++){ \
f6e916
+#define RETRY_IEEE1275_OFDISK_OPEN(device, last_ihandle) \
f6e916
+	                                        unsigned max_retries = MAX_RETRIES; \
f6e916
+                                                if(grub_env_get("ofdisk_retries") != NULL) \
f6e916
+                                                     max_retries = grub_strtoul(grub_env_get("ofdisk_retries"), 0, 10)+1; \
f6e916
+                                                grub_dprintf("ofdisk","MAX_RETRIES set to %u\n",max_retries); \
f6e916
+                                                unsigned retry_i=0;for(retry_i=0; retry_i < max_retries; retry_i++){ \
f6e916
 						if(!grub_ieee1275_open(device, last_ihandle)) \
f6e916
 						break; \
f6e916
 						grub_dprintf("ofdisk","Opening disk %s failed. Retrying...\n",device); }