diff options
author | Michael Brown | 2009-08-10 03:20:21 +0200 |
---|---|---|
committer | Michael Brown | 2009-08-10 23:30:56 +0200 |
commit | 965a0f7a75ef0011062413a6fa62ab6404e0b1ea (patch) | |
tree | 75e1d2a262b40b9a78a49bec495d42c7bcc5bd28 /src/drivers/block | |
parent | [infiniband] Generate more specific errors in response to failure MADs (diff) | |
download | ipxe-965a0f7a75ef0011062413a6fa62ab6404e0b1ea.tar.gz ipxe-965a0f7a75ef0011062413a6fa62ab6404e0b1ea.tar.xz ipxe-965a0f7a75ef0011062413a6fa62ab6404e0b1ea.zip |
[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.
Diffstat (limited to 'src/drivers/block')
-rw-r--r-- | src/drivers/block/srp.c | 17 |
1 files changed, 5 insertions, 12 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", |