On Sun, Jan 29 2006, James Bottomley wrote: > On Sun, 2006-01-29 at 17:50 +0200, Pasi Kärkkäinen wrote: > > Are all sata drivers affected by this bug in 2.6.15? > > Well, all SCSI drivers are affected by it, yes. However, SATA devices > are peculiarly affected because the ordered_flush method of enforcing > barriers, which is where the leak is, can only be implemented for > devices that don't do tag command queueing (i.e. don't have multiple > commands outstanding for a given single device). By and large, SATA > drivers are the only drivers in the SCSI subsystem that can't do tag > command queueing, which is why the problem didn't show up for any other > type of SCSI driver. 2.6.15 didn't support barriers for anything other than ordered flush SCSI low level drivers, hence only SATA is affected. > > Any 'official' patch available? > > Well, yes, 2.6.16-rc1 has this fixed. I can't see backporting this to > 2.6.15.x since it represents a significant functionality enhancement as > well, so I'd lean towards just forcing ordered_flush to zero in 2.6.15.x > which seems to be the best bug fix. Agree, backporting the barrier rewrite would be insane for stable. > > Or is the recommended workaround to set ordered_flush to 0 to fix this.. > > does that have any downsides? > > setting ordered_flush to zero for 2.6.15 turns off the flushing > functionality and restores the old behaviour. I don't see that there > would be any down side to this. Just the usual correctness issue, but since it's leaky it doesn't seem like a big deal to wait for 2.6.16. So here's a patch for 2.6.15: --- Turn off ordered flush barriers for SCSI driver, since the SCSI barrier code has a command leak. Signed-off-by: Jens Axboe <axboe@xxxxxxx> --- linux-2.6.15.1/drivers/scsi/scsi_lib.c~ 2006-01-29 11:55:08.000000000 -0800 +++ linux-2.6.15.1/drivers/scsi/scsi_lib.c 2006-01-29 11:55:38.000000000 -0800 @@ -1534,11 +1534,6 @@ */ if (shost->ordered_tag) blk_queue_ordered(q, QUEUE_ORDERED_TAG); - else if (shost->ordered_flush) { - blk_queue_ordered(q, QUEUE_ORDERED_FLUSH); - q->prepare_flush_fn = scsi_prepare_flush_fn; - q->end_flush_fn = scsi_end_flush_fn; - } if (!shost->use_clustering) clear_bit(QUEUE_FLAG_CLUSTER, &q->queue_flags); -- Jens Axboe - : send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html