1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- #ifndef _SCSI_SCSI_TCQ_H
- #define _SCSI_SCSI_TCQ_H
- #include <linux/blkdev.h>
- #include <scsi/scsi_cmnd.h>
- #include <scsi/scsi_device.h>
- #include <scsi/scsi_host.h>
- #define SCSI_NO_TAG (-1) /* identify no tag in use */
- #ifdef CONFIG_BLOCK
- /**
- * scsi_host_find_tag - find the tagged command by host
- * @shost: pointer to scsi_host
- * @tag: tag
- *
- * Note: for devices using multiple hardware queues tag must have been
- * generated by blk_mq_unique_tag().
- **/
- static inline struct scsi_cmnd *scsi_host_find_tag(struct Scsi_Host *shost,
- int tag)
- {
- struct request *req = NULL;
- if (tag == SCSI_NO_TAG)
- return NULL;
- if (shost_use_blk_mq(shost)) {
- u16 hwq = blk_mq_unique_tag_to_hwq(tag);
- if (hwq < shost->tag_set.nr_hw_queues) {
- req = blk_mq_tag_to_rq(shost->tag_set.tags[hwq],
- blk_mq_unique_tag_to_tag(tag));
- }
- } else {
- req = blk_map_queue_find_tag(shost->bqt, tag);
- }
- if (!req)
- return NULL;
- return req->special;
- }
- #endif /* CONFIG_BLOCK */
- #endif /* _SCSI_SCSI_TCQ_H */
|