The current SCSI handling suffers from large amounts of duplicate code, and
a general confusion of multiple concepts of tagging.

This series tries to reduce the amount of code, and introduce two separate
clear concepts of tagging:

 a) a driver can request block-level tagging to always have a valid index
    assigned to cmd->request->tag by the block layer.  This is already
    automatically done for the blk-mq case, but this gives the optional
    legacy request taggign similar semantics.
 b) the concept of a SCSI "tagged command" is now entirely separate from
    providing an actual tag, and always provided in a flag in the SCSI
    command.  The driver does not need to opt-in this information, but
    it doesn't have to use it.

While this series removes 750 lines of code and provides a much cleaner driver
API it also opens up new questions:

 - how is the change_queue_type API supposed to be used for most drivers?  It
   only changes the tag type from none to simple or back, but except for the
   special implementation in the 53c700 driver doesn't change the queue depth,
   which might cause it to issue multiple non-tagged command.  Fortunately
   most drivers never look at this information, but then again changing the
   queue type is useless to start with.
 - for those drivers looking at the command tagged information we'd need
   to quiesce the LUN.  No driver but the 53c700 driver does that, and the
   53c700 does it at a target-level, which despite a comment claiming it's
   needed doesn't seem to make sense given the code.  If we can make sure
   to quience all LUNs we could avoid the per-command flag for tagged commands
   and always look at the scsi_device flag.
 - similarly, do we need any synchronization when answering a tag message 
reject?
 - queue ramp down may drop to untagged mode, but queue ramp up never reverseѕ
   that.
 - the ->tagged_supported and ->simple_tags flags are bit-fields without clear
   locking protection.  We probably want to move these and similar fields to
   a proper atomic bit flags member.
 - should the MSG_*_TAG fields move to the SPI transport class?  That's where
   they are defined, and besides SPI drivers they are only (ab)used by the
   target code now.

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to