diff options
author | Michael Brown <mcb30@etherboot.org> | 2009-08-10 02:20:21 +0100 |
---|---|---|
committer | Michael Brown <mcb30@etherboot.org> | 2009-08-10 22:30:56 +0100 |
commit | 965a0f7a75ef0011062413a6fa62ab6404e0b1ea (patch) | |
tree | 75e1d2a262b40b9a78a49bec495d42c7bcc5bd28 | |
parent | a0d337912eee5ff0d72d0d85d83be88672d49004 (diff) | |
download | ipxe-965a0f7a75ef0011062413a6fa62ab6404e0b1ea.tar.gz |
[infiniband] Allow SRP reconnection attempts even after reporting failures
With iSCSI, connection attempts are expensive; it may take many
seconds to determine that a connection will fail. SRP connection
attempts are much less expensive, so we may as well avoid the
"optimisation" of declaring a state of permanent failure after a
certain number of attempts. This allows a gPXE SRP initiator to
resume operations after an arbitrary amount of SRP target downtime.
-rw-r--r-- | src/drivers/block/srp.c | 17 | ||||
-rw-r--r-- | src/include/gpxe/srp.h | 6 |
2 files changed, 5 insertions, 18 deletions
diff --git a/src/drivers/block/srp.c b/src/drivers/block/srp.c index f50f194b..1d0799ab 100644 --- a/src/drivers/block/srp.c +++ b/src/drivers/block/srp.c @@ -80,19 +80,16 @@ static void srp_fail ( struct srp_device *srp, int rc ) { /* Clear session state */ srp->state = 0; - /* Increment retry count */ - srp->retry_count++; - - /* If we have reached the retry limit, permanently abort the - * session. - */ + /* If we have reached the retry limit, report the failure */ if ( srp->retry_count >= SRP_MAX_RETRIES ) { - srp->instant_rc = rc; srp_scsi_done ( srp, rc ); return; } - /* Otherwise, try to reopen the connection */ + /* Otherwise, increment the retry count and try to reopen the + * connection + */ + srp->retry_count++; srp_login ( srp ); } @@ -445,10 +442,6 @@ static int srp_command ( struct scsi_device *scsi, struct srp_device *srp = container_of ( scsi->backend, struct srp_device, refcnt ); - /* Return instant failure, if we have already aborted the session */ - if ( srp->instant_rc ) - return srp->instant_rc; - /* Store SCSI command */ if ( srp->command ) { DBGC ( srp, "SRP %p cannot handle concurrent SCSI commands\n", diff --git a/src/include/gpxe/srp.h b/src/include/gpxe/srp.h index 75ec7b83..85f39b93 100644 --- a/src/include/gpxe/srp.h +++ b/src/include/gpxe/srp.h @@ -828,12 +828,6 @@ struct srp_device { unsigned int state; /** Retry counter */ unsigned int retry_count; - /** Instant return status code - * - * Used to avoid retrying the connection on every new SCSI - * command after the retry count has been exceeded. - */ - int instant_rc; /** Current SCSI command */ struct scsi_command *command; |