• Hans de Goede's avatar
    uas: Make uas work with blk-mq · e28e2f2f
    Hans de Goede authored
    With uas over usb-3 the tags inside the uas iu-s must match the usb-3 stream
    ids, and those go from 1 - qdepth.
    
    Before blk-mq calling scsi_activate_tcq(sdev, qdepth) guaranteed that we would
    only get cmnd->request->tag from 0 - (qdepth - 1), and we used those as
    uas-tags / stream-ids.
    
    With blk-mq however we are guaranteed to never get more then qdepth commands
    queued at the same time, but the cmnd->request->tag values may be much larger,
    which breaks uas.
    
    This commit fixes this by generating uas tags in the 1 - qdepth range ourselves
    instead of using cmnd->request->tag.
    
    While touching all involved code anyways also rename the uas_cmd_info stream
    field to uas_tag, because when using uas over usb-2 streams are not used.
    
    Cc: Christoph Hellwig <hch@infradead.org>
    Reported-by: default avatarDouglas Gilbert <dgilbert@interlog.com>
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    
    --
    Changes in v2:
    -Remove ".disable_blk_mq = true" from uas_host_template
    Changes in v3:
    -Rebased on top of Linus' current master branch
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    e28e2f2f
uas.c 30.3 KB