Skip to content

Commit

Permalink
[block] Add a small delay between attempts to reopen SAN targets
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mcb30 committed Mar 27, 2017
1 parent 6b385c9 commit 164378f
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions src/core/sanboot.c
Expand Up @@ -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 );

Expand Down Expand Up @@ -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;
}

Expand Down

0 comments on commit 164378f

Please sign in to comment.