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 <[email protected]>

> 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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to