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