The patch I sent you yesterday has a typo that can lead to serious
breakage. This has been pointed out by Michal Jaegermann. Thanks, Michal.
(k must be compared against -1 and not against 1)
You want to apply this new tiny patch instead and let me know if it fixes:
--- sym53c8xx.c.0402	Mon Apr  2 15:58:32 2001
+++ sym53c8xx.c	Tue Apr  3 07:15:00 2001
@@ -10167,14 +10167,13 @@
 				if (i >= MAX_START*2)
 					i = 0;
 			}
-			assert(k != -1);
-			if (k != 1) {
+			if (k != -1) {
 				np->squeue[k] = np->squeue[i]; /* Idle task */
 				np->squeueput = k; /* Start queue pointer */
-				cp->host_status = HS_ABORTED;
-				cp->scsi_status = S_ILLEGAL;
-				ncr_complete(np, cp);
 			}
+			cp->host_status = HS_ABORTED;
+			cp->scsi_status = S_ILLEGAL;
+			ncr_complete(np, cp);
 		}
 		break;
 	/*
--------------------- Cut Here -----------------
  Gérard.
On Mon, 2 Apr 2001, Gérard Roudier wrote:
> 
> 
> On Sat, 31 Mar 2001, Christian Kurz wrote:
> 
> > Hi,
> > 
> > I'm currently running 2.4.2-ac28 and today I got a failing assumption in
> > sym53c8xx.c. I'm not sure about the exact steps that I did to produce
> > this error, but it must have been something like: cdparanoia -blank=all,
> > then sending Ctrl+C to this process and after it's been killed
> > cdparanoia -blank=fast. I then got assertion: k!=-1 failed. But I found
> > no hint about this in the messages or syslog file. So I looked through
> > sym53c8xx.c to find this code and it seems like line 10123 is
> > responsible for creating this error and kernel panic. Should this be the
> > normal behaviour or is this a bug in the code?
> 
> This might well be both at the same time. I mean normal behaviour given a
> bug in the code. :-)
> 
> Could you try this tiny patch and let me know:
> 
> --- sym53c8xx.c.0402	Mon Apr  2 15:58:32 2001
> +++ sym53c8xx.c	Mon Apr  2 16:02:43 2001
> @@ -10167,14 +10167,13 @@
>  				if (i >= MAX_START*2)
>  					i = 0;
>  			}
> -			assert(k != -1);
>  			if (k != 1) {
>  				np->squeue[k] = np->squeue[i]; /* Idle task */
>  				np->squeueput = k; /* Start queue pointer */
> -				cp->host_status = HS_ABORTED;
> -				cp->scsi_status = S_ILLEGAL;
> -				ncr_complete(np, cp);
>  			}
> +			cp->host_status = HS_ABORTED;
> +			cp->scsi_status = S_ILLEGAL;
> +			ncr_complete(np, cp);
>  		}
>  		break;
>  	/*
> 
> What happens is that this part of the driver code assumed that the CCB for
> an IO to abort is queued to the SCSI SCRIPTS. This is not always true
> since the driver may temporarily not queue all IOs to SCRIPTS. This may
> happens on QUEUE FULL condition or for devices that donnot accept tagged
> commands, for example.
> 
> Regards,
>   Gérard.
> 
> 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/