Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[infiniband] Allow SRP reconnection attempts even after reporting fai…
…lures

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.
  • Loading branch information
Michael Brown committed Aug 10, 2009
1 parent a0d3379 commit 965a0f7
Show file tree
Hide file tree
Showing 2 changed files with 5 additions and 18 deletions.
17 changes: 5 additions & 12 deletions src/drivers/block/srp.c
Expand Up @@ -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 );
}

Expand Down Expand Up @@ -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",
Expand Down
6 changes: 0 additions & 6 deletions src/include/gpxe/srp.h
Expand Up @@ -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;

Expand Down

0 comments on commit 965a0f7

Please sign in to comment.