public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* aic94xx: fix sequencer hang on error recovery
@ 2008-02-22 23:01 James Bottomley
  2008-02-24  1:01 ` Luben Tuikov
  0 siblings, 1 reply; 2+ messages in thread
From: James Bottomley @ 2008-02-22 23:01 UTC (permalink / raw)
  To: linux-scsi

The clear nexus I_T and clear nexus I_T_L functions in the aic94xx
specify the SUSPEND_TX flag which causes the sequencer to be suspended
until it receives a RESUME_TX.  Unfortunately, nothing ever sends the
resume, so the sequencer on the link is stopped forever, leading to
eventual timeouts and I/O errors.

Since clear nexus commands are only executed as part of error recovery,
it's perfectly fine to keep the sequencer running on the link ... as
soon as the recovery function is completed, we'll send it the commands
to retry.

Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>

---

diff --git a/drivers/scsi/aic94xx/aic94xx_tmf.c b/drivers/scsi/aic94xx/aic94xx_tmf.c
index b52124f..144f5ad 100644
--- a/drivers/scsi/aic94xx/aic94xx_tmf.c
+++ b/drivers/scsi/aic94xx/aic94xx_tmf.c
@@ -151,8 +151,6 @@ static int asd_clear_nexus_I_T(struct domain_device *dev)
 	CLEAR_NEXUS_PRE;
 	scb->clear_nexus.nexus = NEXUS_I_T;
 	scb->clear_nexus.flags = SEND_Q | EXEC_Q | NOTINQ;
-	if (dev->tproto)
-		scb->clear_nexus.flags |= SUSPEND_TX;
 	scb->clear_nexus.conn_handle = cpu_to_le16((u16)(unsigned long)
 						   dev->lldd_dev);
 	CLEAR_NEXUS_POST;
@@ -169,8 +167,6 @@ static int asd_clear_nexus_I_T_L(struct domain_device *dev, u8 *lun)
 	CLEAR_NEXUS_PRE;
 	scb->clear_nexus.nexus = NEXUS_I_T_L;
 	scb->clear_nexus.flags = SEND_Q | EXEC_Q | NOTINQ;
-	if (dev->tproto)
-		scb->clear_nexus.flags |= SUSPEND_TX;
 	memcpy(scb->clear_nexus.ssp_task.lun, lun, 8);
 	scb->clear_nexus.conn_handle = cpu_to_le16((u16)(unsigned long)
 						   dev->lldd_dev);



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: aic94xx: fix sequencer hang on error recovery
  2008-02-22 23:01 aic94xx: fix sequencer hang on error recovery James Bottomley
@ 2008-02-24  1:01 ` Luben Tuikov
  0 siblings, 0 replies; 2+ messages in thread
From: Luben Tuikov @ 2008-02-24  1:01 UTC (permalink / raw)
  To: linux-scsi, James Bottomley

--- On Fri, 2/22/08, James Bottomley <James.Bottomley@HansenPartnership.com> wrote:
> The clear nexus I_T and clear nexus I_T_L functions in the
> aic94xx
> specify the SUSPEND_TX flag which causes the sequencer to
> be suspended
> until it receives a RESUME_TX.  Unfortunately, nothing ever
> sends the
> resume, so the sequencer on the link is stopped forever,
> leading to
> eventual timeouts and I/O errors.
> 
> Since clear nexus commands are only executed as part of
> error recovery,
> it's perfectly fine to keep the sequencer running on
> the link ... as
> soon as the recovery function is completed, we'll send
> it the commands
> to retry.

No, this doesn't seem right.

   Luben

> Signed-off-by: James Bottomley
> <James.Bottomley@HansenPartnership.com>
> 
> ---
> 
> diff --git a/drivers/scsi/aic94xx/aic94xx_tmf.c
> b/drivers/scsi/aic94xx/aic94xx_tmf.c
> index b52124f..144f5ad 100644
> --- a/drivers/scsi/aic94xx/aic94xx_tmf.c
> +++ b/drivers/scsi/aic94xx/aic94xx_tmf.c
> @@ -151,8 +151,6 @@ static int asd_clear_nexus_I_T(struct
> domain_device *dev)
>  	CLEAR_NEXUS_PRE;
>  	scb->clear_nexus.nexus = NEXUS_I_T;
>  	scb->clear_nexus.flags = SEND_Q | EXEC_Q | NOTINQ;
> -	if (dev->tproto)
> -		scb->clear_nexus.flags |= SUSPEND_TX;
>  	scb->clear_nexus.conn_handle =
> cpu_to_le16((u16)(unsigned long)
>  						   dev->lldd_dev);
>  	CLEAR_NEXUS_POST;
> @@ -169,8 +167,6 @@ static int asd_clear_nexus_I_T_L(struct
> domain_device *dev, u8 *lun)
>  	CLEAR_NEXUS_PRE;
>  	scb->clear_nexus.nexus = NEXUS_I_T_L;
>  	scb->clear_nexus.flags = SEND_Q | EXEC_Q | NOTINQ;
> -	if (dev->tproto)
> -		scb->clear_nexus.flags |= SUSPEND_TX;
>  	memcpy(scb->clear_nexus.ssp_task.lun, lun, 8);
>  	scb->clear_nexus.conn_handle =
> cpu_to_le16((u16)(unsigned long)
>  						   dev->lldd_dev);
> 
> 
> -
> To unsubscribe from this list: send the line
> "unsubscribe linux-scsi" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at 
> http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2008-02-24  1:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-22 23:01 aic94xx: fix sequencer hang on error recovery James Bottomley
2008-02-24  1:01 ` Luben Tuikov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox