On Tue, Jun 03, 2014 at 09:36:56PM -0400, Douglas Gilbert wrote: > When the SG_IO ioctl was copied into the block layer and > later into the bsg driver, subtle differences emerged. > > One difference is the way injected commands are queued through > the block layer (i.e. this is not SCSI device queueing nor SATA > NCQ). Summarizing: > - SG_IO in the block layer: blk_exec*(at_head=false) > - sg SG_IO: at_head=true > - bsg SG_IO: at_head=true > > Some time ago Boaz Harrosh introduced a sg v4 flag called > BSG_FLAG_Q_AT_TAIL to override the bsg driver default. > This patch does the equivalent for the sg driver. > > ChangeLog: > Introduce SG_FLAG_Q_AT_TAIL flag to cause commands > to be injected into the block layer with > at_head=false. > > Signed-off-by: Douglas Gilbert <dgilbert@xxxxxxxxxxxx> > diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c > index 177f755..1b7d4f6 100644 > --- a/drivers/scsi/sg.c > +++ b/drivers/scsi/sg.c > @@ -740,7 +740,7 @@ static int > sg_common_write(Sg_fd * sfp, Sg_request * srp, > unsigned char *cmnd, int timeout, int blocking) > { > - int k, data_dir; > + int k, data_dir, at_head; > Sg_device *sdp = sfp->parentdp; > sg_io_hdr_t *hp = &srp->header; > > @@ -784,11 +784,12 @@ sg_common_write(Sg_fd * sfp, Sg_request * srp, > break; > } > hp->duration = jiffies_to_msecs(jiffies); > + at_head = !(hp->interface_id && (SG_FLAG_Q_AT_TAIL & hp->flags)); It seems like all other occurances of ->interface_id compare to either '\0' or 'S', so this looks odd. Also I think this would really benefit from beeing untangled into and if/else as it took me literally two minutes to parse.. -- To unsubscribe from this list: 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