Discussion:
[PATCH 1/2] Revert "block: all blk-mq requests are tagged"
Christoph Hellwig
2014-10-19 15:13:57 UTC
Permalink
This reverts commit fb3ccb5da71273e7f0d50b50bc879e50cedd60e7.

SCSI-2/SPI actually needs the tagged/untagged flag in the request to
work properly. Revert this patch and add a follow on to set it in
the right place.

Reported-by: Meelis Roos <***@linux.ee>
Signed-off-by: Christoph Hellwig <***@lst.de>
Cc: ***@vger.kernel.org
---
include/linux/blkdev.h | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index 0207a78..51d0dc2 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -1136,8 +1136,7 @@ static inline bool blk_needs_flush_plug(struct task_struct *tsk)
/*
* tag stuff
*/
-#define blk_rq_tagged(rq) \
- ((rq)->mq_ctx || ((rq)->cmd_flags & REQ_QUEUED))
+#define blk_rq_tagged(rq) ((rq)->cmd_flags & REQ_QUEUED)
extern int blk_queue_start_tag(struct request_queue *, struct request *);
extern struct request *blk_queue_find_tag(struct request_queue *, int);
extern void blk_queue_end_tag(struct request_queue *, struct request *);
--
1.9.1
Christoph Hellwig
2014-10-19 15:13:58 UTC
Permalink
To generate the right SPI tag messages we need to properly set
QUEUE_FLAG_QUEUED in the request_queue and mirror it to the
request.

Reported-by: Meelis Roos <***@linux.ee>
Signed-off-by: Christoph Hellwig <***@lst.de>
Cc: ***@vger.kernel.org
---
drivers/scsi/scsi_lib.c | 5 +++++
include/scsi/scsi_tcq.h | 8 ++++----
2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 9eff8a3..50a6e1a 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -1893,6 +1893,11 @@ static int scsi_queue_rq(struct blk_mq_hw_ctx *hctx, struct request *req,
blk_mq_start_request(req);
}

+ if (blk_queue_tagged(q))
+ req->cmd_flags |= REQ_QUEUED;
+ else
+ req->cmd_flags &= ~REQ_QUEUED;
+
scsi_init_cmd_errh(cmd);
cmd->scsi_done = scsi_mq_done;

diff --git a/include/scsi/scsi_tcq.h b/include/scsi/scsi_tcq.h
index e645835..56ed843 100644
--- a/include/scsi/scsi_tcq.h
+++ b/include/scsi/scsi_tcq.h
@@ -67,8 +67,9 @@ static inline void scsi_activate_tcq(struct scsi_device *sdev, int depth)
if (!sdev->tagged_supported)
return;

- if (!shost_use_blk_mq(sdev->host) &&
- !blk_queue_tagged(sdev->request_queue))
+ if (shost_use_blk_mq(sdev->host))
+ queue_flag_set_unlocked(QUEUE_FLAG_QUEUED, sdev->request_queue);
+ else if (!blk_queue_tagged(sdev->request_queue))
blk_queue_init_tags(sdev->request_queue, depth,
sdev->host->bqt);

@@ -81,8 +82,7 @@ static inline void scsi_activate_tcq(struct scsi_device *sdev, int depth)
**/
static inline void scsi_deactivate_tcq(struct scsi_device *sdev, int depth)
{
- if (!shost_use_blk_mq(sdev->host) &&
- blk_queue_tagged(sdev->request_queue))
+ if (blk_queue_tagged(sdev->request_queue))
blk_queue_free_tags(sdev->request_queue);
scsi_adjust_queue_depth(sdev, 0, depth);
}
--
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to ***@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Christoph Hellwig
2014-10-23 08:45:30 UTC
Permalink
ping?
Fix the assumption that we can treat all blk-mq requests as tagged. For
traditional SCSI that's wrong, as being tagged has a very explicit meaning
on the wire.
This is a little bit different from the version Meelis tested earlier, but
the concept is the same. I didn't want to add a Tested-by tag as it's
different enough, though.
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
More majordomo info at http://vger.kernel.org/majordomo-info.html
---end quoted text---
Meelis Roos
2014-10-23 10:49:07 UTC
Permalink
Post by Christoph Hellwig
ping?
Sorry, forgot to reply. Yes, it worked fine, on the initial Ultra 1 and
additionally on Ultra 2 too.
Post by Christoph Hellwig
Fix the assumption that we can treat all blk-mq requests as tagged. For
traditional SCSI that's wrong, as being tagged has a very explicit meaning
on the wire.
This is a little bit different from the version Meelis tested earlier, but
the concept is the same. I didn't want to add a Tested-by tag as it's
different enough, though.
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
More majordomo info at http://vger.kernel.org/majordomo-info.html
---end quoted text---
--
Meelis Roos (***@linux.ee)
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to ***@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Christoph Hellwig
2014-10-23 17:14:54 UTC
Permalink
Post by Meelis Roos
ping?
Sorry, forgot to reply. Yes, it worked fine, on the initial Ultra 1 and
additionally on Ultra 2 too.
Thanks!

Can I get a review from Jens and some SCSI developers, too?

Jens, are you fine taking the blkdev.h revert through the SCSI tree?
Jens Axboe
2014-10-23 17:16:11 UTC
Permalink
Post by Christoph Hellwig
Post by Meelis Roos
ping?
Sorry, forgot to reply. Yes, it worked fine, on the initial Ultra 1 and
additionally on Ultra 2 too.
Thanks!
Can I get a review from Jens and some SCSI developers, too?
Yes, I did read them, you can add my reviewed/acked.
Post by Christoph Hellwig
Jens, are you fine taking the blkdev.h revert through the SCSI tree?
Sure, that seems to be the easiest way to do it.
--
Jens Axboe

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