[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.
pull/1/head
Michael Brown 2009-08-10 02:20:21 +01:00
parent a0d337912e
commit 965a0f7a75
2 changed files with 5 additions and 18 deletions

View File

@ -80,19 +80,16 @@ static void srp_fail ( struct srp_device *srp, int rc ) {
/* Clear session state */ /* Clear session state */
srp->state = 0; srp->state = 0;
/* Increment retry count */ /* If we have reached the retry limit, report the failure */
srp->retry_count++;
/* If we have reached the retry limit, permanently abort the
* session.
*/
if ( srp->retry_count >= SRP_MAX_RETRIES ) { if ( srp->retry_count >= SRP_MAX_RETRIES ) {
srp->instant_rc = rc;
srp_scsi_done ( srp, rc ); srp_scsi_done ( srp, rc );
return; return;
} }
/* Otherwise, try to reopen the connection */ /* Otherwise, increment the retry count and try to reopen the
* connection
*/
srp->retry_count++;
srp_login ( srp ); srp_login ( srp );
} }
@ -445,10 +442,6 @@ static int srp_command ( struct scsi_device *scsi,
struct srp_device *srp = struct srp_device *srp =
container_of ( scsi->backend, struct srp_device, refcnt ); 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 */ /* Store SCSI command */
if ( srp->command ) { if ( srp->command ) {
DBGC ( srp, "SRP %p cannot handle concurrent SCSI commands\n", DBGC ( srp, "SRP %p cannot handle concurrent SCSI commands\n",

View File

@ -828,12 +828,6 @@ struct srp_device {
unsigned int state; unsigned int state;
/** Retry counter */ /** Retry counter */
unsigned int retry_count; 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 */ /** Current SCSI command */
struct scsi_command *command; struct scsi_command *command;