• Douglas Gilbert's avatar
    block SG_IO: add SG_FLAG_Q_AT_HEAD flag · d1515613
    Douglas Gilbert authored
    After 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 on block layer device: blk_exec*(at_head=false)
      - sg device SG_IO: at_head=true
      - bsg device 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. A
    recent patch titled: "sg: add SG_FLAG_Q_AT_TAIL flag"
    allowed the sg driver default to be overridden. This patch
    allows a SG_IO ioctl sent to a block layer device to have
    its default overridden.
    
    ChangeLog:
        - introduce SG_FLAG_Q_AT_HEAD flag in sg.h to cause
          commands that are injected via a block layer
          device SG_IO ioctl to set at_head=true
        - make comments clearer about queueing in sg.h since the
          header is used both by the sg device and block layer
          device implementations of the SG_IO ioctl.
        - introduce BSG_FLAG_Q_AT_HEAD in bsg.h for compatibility
          (it does nothing) and update comments.
    Signed-off-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarMike Christie <michaelc@cs.wisc.edu>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    d1515613
scsi_ioctl.c 19.3 KB