On Wed, Jun 15 2005, James Bottomley wrote: > On Wed, 2005-06-15 at 10:05 -0700, Patrick Mansfield wrote: > > First in scsi_alloc_queue, the flush/sync code is only used if we don't > > have ordered tags, and if the adapter driver explicitly allows it > > (shost->order_flush). > > > > Plus we clear order_flush in scsi_host_alloc if can_queue > 1. > > > > So ipr will never get those sync cache commands, correct? > > Actually, yes. I thought Jens turned it on globally, but apparently > it's only set for the sata controllers. Yeah, I figured most other scsi controllers supported TCQ... > the can_queue check is a bit mysterious since non TCQ devices should > have can_queue == 2 (so they have one command executing and one command > ready to roll). But that will cause the mid layer to invoke ->queuecommand() when you already have one command queued, thus the driver needs to check if it really can queue one more. I greatly prefer the driver setting the exact depth instead. If you want to have the next command pre-setup, you should do so in the mid layer. > > And we default to QUEUE_ORDERED_NONE (0) if ordered_tag and ordered_flush > > are not set. > > > > But I can't find any where that we set ordered_tag at all, am I missing > > something??? Let alone in ipr. > > I think that was also added by the barrier patch set. Although it's well > known what the difficulties of using ordered tag queueing to implement > barriers are: > > 1) Race in queuecommand() where barrier gets BUSY or QUEUE_FULL but next > command is accepted before we see this. > 2) Error handling is not robust to ordering. > 3) Qerr bit of the control mode page needs to be set correctly. Some work still left to fully supported barriers with tags, Tejun is making great progress though. -- 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