mirror of https://github.com/ipxe/ipxe.git
[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
parent
a0d337912e
commit
965a0f7a75
|
@ -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",
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue