Messages in this thread Patch in this message | | | Date | Sun, 1 Nov 1998 19:36:34 +0100 (CET) | From | Andrea Arcangeli <> | Subject | Re: 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/
| |