From 965a0f7a75ef0011062413a6fa62ab6404e0b1ea Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Mon, 10 Aug 2009 02:20:21 +0100 Subject: [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. --- src/drivers/block/srp.c | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'src/drivers') diff --git a/src/drivers/block/srp.c b/src/drivers/block/srp.c index f50f194ba..1d0799ab7 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", -- cgit v1.2.3-55-g7522