summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorMichael Brown2017-03-27 14:32:29 +0200
committerMichael Brown2017-03-27 14:41:22 +0200
commit164378fee60d02c0287bbaa9d390510fc9eab1fd (patch)
treead84ba9c51aeca44cadd22c5953330e79a97a7ba /src/core
parent[block] Allow SAN retry count to be reconfigured (diff)
downloadipxe-164378fee60d02c0287bbaa9d390510fc9eab1fd.tar.gz
ipxe-164378fee60d02c0287bbaa9d390510fc9eab1fd.tar.xz
ipxe-164378fee60d02c0287bbaa9d390510fc9eab1fd.zip
[block] Add a small delay between attempts to reopen SAN targets
When all SAN targets are completely unreachable, there will be a natural delay between reopening attempts due to the network connection timeout on the unreachable targets. However, some SAN targets may accept connections instantly and report a temporary unavailability by e.g. failing the TEST UNIT READY command. If all targets are behaving this way then there will be no natural delay, and we will attempt to saturate the network with connection attempts. Fix by introducing a small delay between attempts. Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/core')
-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;
}