summaryrefslogtreecommitdiffstats
path: root/src/core/sanboot.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/sanboot.c')
-rw-r--r--src/core/sanboot.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/core/sanboot.c b/src/core/sanboot.c
index c7279ad3..efab3d02 100644
--- a/src/core/sanboot.c
+++ b/src/core/sanboot.c
@@ -74,6 +74,16 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
*/
#define SAN_DEFAULT_RETRIES 10
+/**
+ * Delay between reopening attempts
+ *
+ * Some SAN targets will always accept connections instantly and
+ * report a temporary unavailability by e.g. failing the TEST UNIT
+ * READY command. Avoid bombarding such targets by introducing a
+ * small delay between attempts.
+ */
+#define SAN_REOPEN_DELAY_SECS 5
+
/** List of SAN devices */
LIST_HEAD ( san_devices );
@@ -484,6 +494,10 @@ sandev_command ( struct san_device *sandev,
/* Reopen block device if applicable */
if ( sandev_needs_reopen ( sandev ) &&
( ( rc = sandev_reopen ( sandev ) ) != 0 ) ) {
+
+ /* Delay reopening attempts */
+ sleep_fixed ( SAN_REOPEN_DELAY_SECS );
+
continue;
}