[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: 2.6.8 release



On Fri, Aug 13, 2004 at 03:08:45PM +0100, Matthew Wilcox wrote:
> I think you're mistaken.  The known bug in the DV scsi core was fixed
> 9 weeks ago (according to Linus' bkweb).  There's still at least one
> other bug which Dann can replicate at will on one of his machines.
> Last I heard, he was working on putting it outside the firewall for
> James to look at.

scsi_transport_spi.c diff from 2.6.7 to 2.6.8-rc is below, the period
thing did manifest itself as sym2 hang on boot.


--- linux-2.6.7/drivers/scsi/scsi_transport_spi.c	2004-07-06 15:24:56.000000000 +0200
+++ linux-2.5/drivers/scsi/scsi_transport_spi.c	2004-06-25 14:23:50.000000000 +0200
@@ -152,7 +152,7 @@
 	spi_transport_store_function(field, format_string)		\
 static CLASS_DEVICE_ATTR(field, S_IRUGO | S_IWUSR,			\
 			 show_spi_transport_##field,			\
-			 store_spi_transport_##field)
+			 store_spi_transport_##field);
 
 /* The Parallel SCSI Tranport Attributes: */
 spi_transport_rd_attr(offset, "%d\n");
@@ -173,7 +173,7 @@
 	spi_dv_device(sdev);
 	return count;
 }
-static CLASS_DEVICE_ATTR(revalidate, S_IWUSR, NULL, store_spi_revalidate)
+static CLASS_DEVICE_ATTR(revalidate, S_IWUSR, NULL, store_spi_revalidate);
 
 /* Translate the period into ns according to the current spec
  * for SDTR/PPR messages */
@@ -390,10 +390,11 @@
 {
 	struct spi_internal *i = to_spi_internal(sreq->sr_host->transportt);
 	struct scsi_device *sdev = sreq->sr_device;
-	int period, prevperiod = 0; 
+	int period = 0, prevperiod = 0; 
 
 
 	for (;;) {
+		int newperiod;
 		if (compare_fn(sreq, buffer, ptr, DV_LOOPS))
 			/* Successful DV */
 			break;
@@ -401,7 +402,8 @@
 		/* OK, retrain, fallback */
 		if (i->f->get_period)
 			i->f->get_period(sdev);
-		period = spi_period(sdev);
+		newperiod = spi_period(sdev);
+		period = newperiod > period ? newperiod : period;
 		if (period < 0x0d)
 			period++;
 		else



Reply to: