lkml.org 
[lkml]   [1998]   [Nov]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: arca-1-against-pre-2.1.127-3
On Sun, 1 Nov 1998, Mike Galbraith wrote:

>Nogo. It gets to..

The bug is in the mid/high level drivers (host.c was initializing
last_reset to 0 for example). Browsing the scsi code I seen that
last_reset == 0 is a special value somewhere btw...

Please try this incremental patch. arca-5 include it and is out btw
(ftp://e-mind.com/pub/linux/kernel-patches/arca-5....).

Index: linux/drivers/scsi/hosts.c
diff -u linux/drivers/scsi/hosts.c:1.1.1.2 linux/drivers/scsi/hosts.c:1.1.1.2.4.1
--- linux/drivers/scsi/hosts.c:1.1.1.2 Fri Oct 9 17:42:09 1998
+++ linux/drivers/scsi/hosts.c Sun Nov 1 19:32:43 1998
@@ -577,7 +577,7 @@
next_scsi_host++;
retval->host_queue = NULL;
retval->host_wait = NULL;
- retval->last_reset = 0;
+ retval->last_reset = jiffies;
retval->irq = 0;
retval->dma_channel = 0xff;

Index: linux/drivers/scsi/scsi_error.c
diff -u linux/drivers/scsi/scsi_error.c:1.1.1.1 linux/drivers/scsi/scsi_error.c:1.1.1.1.14.1
--- linux/drivers/scsi/scsi_error.c:1.1.1.1 Fri Oct 2 19:23:22 1998
+++ linux/drivers/scsi/scsi_error.c Sun Nov 1 19:32:44 1998
@@ -142,7 +142,6 @@
SCSI_LOG_ERROR_RECOVERY(5,printk("Clearing timer for command %p\n", SCset));

SCset->eh_timeout.data = (unsigned long) NULL;
- SCset->eh_timeout.expires = 0;
SCset->eh_timeout.function = NULL;

return rtn;
Index: linux/drivers/scsi/scsi_obsolete.c
diff -u linux/drivers/scsi/scsi_obsolete.c:1.1.1.2.4.2 linux/drivers/scsi/scsi_obsolete.c:1.1.1.2.4.3
--- linux/drivers/scsi/scsi_obsolete.c:1.1.1.2.4.2 Sat Oct 24 16:49:27 1998
+++ linux/drivers/scsi/scsi_obsolete.c Sun Nov 1 19:32:44 1998
@@ -607,9 +607,10 @@
if ((++SCpnt->retries) < SCpnt->allowed)
{
if ((SCpnt->retries >= (SCpnt->allowed >> 1))
- && !(SCpnt->host->last_reset > 0 &&
+ /* FIXME: last_reset == 0 is allowed
+ * && !(SCpnt->host->last_reset > 0 */ &&
time_before(jiffies, SCpnt->host->last_reset
- + MIN_RESET_PERIOD))
+ + MIN_RESET_PERIOD)
&& !(SCpnt->flags & WAS_RESET))
{
printk("scsi%d channel %d : resetting for second half of retries.\n",
@@ -955,8 +956,8 @@
host->last_reset = jiffies;
SCpnt->flags |= (WAS_RESET | IS_RESETTING);
temp = host->hostt->reset(SCpnt, reset_flags);
- if ((host->last_reset < jiffies) ||
- (host->last_reset > (jiffies + 20 * HZ)))
+ if (time_before(host->last_reset, jiffies) ||
+ (time_after(host->last_reset, jiffies + 20 * HZ)))
host->last_reset = jiffies;
if (!host->block) host->host_busy--;
}
@@ -1071,7 +1072,7 @@
* timers for timeout.
*/

- if( SCset->eh_timeout.expires == 0 )
+ if( SCset->eh_timeout.next == NULL )
{
rtn = 0;
}
Andrea Arcangeli


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:45    [W:0.069 / U:0.120 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site