From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sagi Grimberg Subject: Re: [PATCH v2 04/12] scsi_tcq.h: Add support for multiple hardware queues Date: Sun, 19 Oct 2014 19:12:15 +0300 Message-ID: <5443E2DF.1040605@dev.mellanox.co.il> References: <5433E43D.3010107@acm.org> <5433E4C4.4030104@acm.org> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <5433E4C4.4030104@acm.org> Sender: linux-scsi-owner@vger.kernel.org To: Bart Van Assche , Christoph Hellwig Cc: Jens Axboe , Sagi Grimberg , Sebastian Parschauer , Robert Elliott , Ming Lei , "linux-scsi@vger.kernel.org" , linux-rdma List-Id: linux-rdma@vger.kernel.org On 10/7/2014 4:04 PM, Bart Van Assche wrote: > Modify scsi_find_tag() and scsi_host_find_tag() such that these > fuctions can translate a tag generated by blk_mq_unique_tag(). > > Signed-off-by: Bart Van Assche > Cc: Christoph Hellwig > Cc: Sagi Grimberg > --- > include/scsi/scsi_tcq.h | 19 +++++++++++-------- > 1 file changed, 11 insertions(+), 8 deletions(-) > > diff --git a/include/scsi/scsi_tcq.h b/include/scsi/scsi_tcq.h > index e645835..ea1ca9c 100644 > --- a/include/scsi/scsi_tcq.h > +++ b/include/scsi/scsi_tcq.h > @@ -111,18 +111,21 @@ static inline int scsi_populate_tag_msg(struct scsi_cmnd *cmd, char *msg) > } > > static inline struct scsi_cmnd *scsi_mq_find_tag(struct Scsi_Host *shost, > - unsigned int hw_ctx, int tag) > + int unique_tag) > { > - struct request *req; > + u16 hwq = blk_mq_unique_tag_to_hwq(unique_tag); > + struct request *req = NULL; > > - req = blk_mq_tag_to_rq(shost->tag_set.tags[hw_ctx], 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(unique_tag)); > return req ? (struct scsi_cmnd *)req->special : NULL; > } > > /** > * scsi_find_tag - find a tagged command by device > * @SDpnt: pointer to the ScSI device > - * @tag: the tag number > + * @tag: tag generated by blk_mq_unique_tag() > * > * Notes: > * Only works with tags allocated by the generic blk layer. > @@ -133,9 +136,9 @@ static inline struct scsi_cmnd *scsi_find_tag(struct scsi_device *sdev, int tag) > > if (tag != SCSI_NO_TAG) { > if (shost_use_blk_mq(sdev->host)) > - return scsi_mq_find_tag(sdev->host, 0, tag); > + return scsi_mq_find_tag(sdev->host, tag); > > - req = blk_queue_find_tag(sdev->request_queue, tag); > + req = blk_queue_find_tag(sdev->request_queue, tag); Why is this line different? > return req ? (struct scsi_cmnd *)req->special : NULL; > } > > @@ -174,7 +177,7 @@ static inline int scsi_init_shared_tag_map(struct Scsi_Host *shost, int depth) > /** > * scsi_host_find_tag - find the tagged command by host > * @shost: pointer to scsi_host > - * @tag: tag of the scsi_cmnd > + * @tag: tag generated by blk_mq_unique_tag() > * > * Notes: > * Only works with tags allocated by the generic blk layer. > @@ -186,7 +189,7 @@ static inline struct scsi_cmnd *scsi_host_find_tag(struct Scsi_Host *shost, > > if (tag != SCSI_NO_TAG) { > if (shost_use_blk_mq(shost)) > - return scsi_mq_find_tag(shost, 0, tag); > + return scsi_mq_find_tag(shost, tag); > req = blk_map_queue_find_tag(shost->bqt, tag); > return req ? (struct scsi_cmnd *)req->special : NULL; > } >