From: Ian W MORRISON <ianwmorrison@gmail.com>
To: axboe@kernel.dk
Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org,
kashyap.desai@broadcom.com, loberman@redhat.com, osandov@fb.com,
hch@lst.de, bart.vanassche@wdc.com, hare@suse.de,
ming.lei@redhat.com, ianwmorrison@gmail.com
Subject: [PATCH] Revert "blk-mq: issue directly if hw queue isn't busy in case of 'none'"
Date: Wed, 29 Aug 2018 01:47:27 +1000 [thread overview]
Message-ID: <20180828154727.3589-1-ianwmorrison@gmail.com> (raw)
Kernel oops when booting on Bay and Cherry Trail devices
such as Intel Compute Stick. Bisected as:
commit 6ce3dd6eec11 ("blk-mq: issue directly if hw queue isn't busy in case of 'none'")
This patch reverts the above commit.
Signed-off-by: Ian W MORRISON <ianwmorrison@gmail.com>
---
block/blk-mq-sched.c | 13 +------------
block/blk-mq.c | 27 +--------------------------
block/blk-mq.h | 2 --
3 files changed, 2 insertions(+), 40 deletions(-)
diff --git a/block/blk-mq-sched.c b/block/blk-mq-sched.c
index 29bfe8017a2d..3204c39cb39f 100644
--- a/block/blk-mq-sched.c
+++ b/block/blk-mq-sched.c
@@ -405,19 +405,8 @@ void blk_mq_sched_insert_requests(struct request_queue *q,
if (e && e->type->ops.mq.insert_requests)
e->type->ops.mq.insert_requests(hctx, list, false);
- else {
- /*
- * try to issue requests directly if the hw queue isn't
- * busy in case of 'none' scheduler, and this way may save
- * us one extra enqueue & dequeue to sw queue.
- */
- if (!hctx->dispatch_busy && !e && !run_queue_async) {
- blk_mq_try_issue_list_directly(hctx, list);
- if (list_empty(list))
- return;
- }
+ else
blk_mq_insert_requests(hctx, ctx, list);
- }
blk_mq_run_hw_queue(hctx, run_queue_async);
}
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 85a1c1a59c72..09e4611d330d 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1693,16 +1693,13 @@ static blk_status_t __blk_mq_issue_directly(struct blk_mq_hw_ctx *hctx,
ret = q->mq_ops->queue_rq(hctx, &bd);
switch (ret) {
case BLK_STS_OK:
- blk_mq_update_dispatch_busy(hctx, false);
*cookie = new_cookie;
break;
case BLK_STS_RESOURCE:
case BLK_STS_DEV_RESOURCE:
- blk_mq_update_dispatch_busy(hctx, true);
__blk_mq_requeue_request(rq);
break;
default:
- blk_mq_update_dispatch_busy(hctx, false);
*cookie = BLK_QC_T_NONE;
break;
}
@@ -1785,27 +1782,6 @@ blk_status_t blk_mq_request_issue_directly(struct request *rq)
return ret;
}
-void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx,
- struct list_head *list)
-{
- while (!list_empty(list)) {
- blk_status_t ret;
- struct request *rq = list_first_entry(list, struct request,
- queuelist);
-
- list_del_init(&rq->queuelist);
- ret = blk_mq_request_issue_directly(rq);
- if (ret != BLK_STS_OK) {
- if (ret == BLK_STS_RESOURCE ||
- ret == BLK_STS_DEV_RESOURCE) {
- list_add(&rq->queuelist, list);
- break;
- }
- blk_mq_end_request(rq, ret);
- }
- }
-}
-
static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio)
{
const int is_sync = op_is_sync(bio->bi_opf);
@@ -1906,8 +1882,7 @@ static blk_qc_t blk_mq_make_request(struct request_queue *q, struct bio *bio)
blk_mq_try_issue_directly(data.hctx, same_queue_rq,
&cookie);
}
- } else if ((q->nr_hw_queues > 1 && is_sync) || (!q->elevator &&
- !data.hctx->dispatch_busy)) {
+ } else if (q->nr_hw_queues > 1 && is_sync) {
blk_mq_put_ctx(data.ctx);
blk_mq_bio_to_request(rq, bio);
blk_mq_try_issue_directly(data.hctx, rq, &cookie);
diff --git a/block/blk-mq.h b/block/blk-mq.h
index 9497b47e2526..bc2b24735ed4 100644
--- a/block/blk-mq.h
+++ b/block/blk-mq.h
@@ -64,8 +64,6 @@ void blk_mq_insert_requests(struct blk_mq_hw_ctx *hctx, struct blk_mq_ctx *ctx,
/* Used by blk_insert_cloned_request() to issue request directly */
blk_status_t blk_mq_request_issue_directly(struct request *rq);
-void blk_mq_try_issue_list_directly(struct blk_mq_hw_ctx *hctx,
- struct list_head *list);
/*
* CPU -> queue mappings
--
2.17.1
next reply other threads:[~2018-08-28 15:47 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-28 15:47 Ian W MORRISON [this message]
2018-08-28 15:48 ` [PATCH] Revert "blk-mq: issue directly if hw queue isn't busy in case of 'none'" Jens Axboe
2018-08-28 16:07 ` Ian W MORRISON
2018-08-28 16:09 ` Jens Axboe
[not found] ` <CAFXWsS82zi7w81-=4ALwMiFm9iQd=NgF3sSBLfvNdU2czEzxwg@mail.gmail.com>
2018-08-28 16:13 ` Jens Axboe
2018-08-28 17:01 ` Ian W MORRISON
2018-08-28 17:12 ` Jens Axboe
2018-08-28 19:11 ` Hunter, Adrian
2018-08-29 6:15 ` Ulf Hansson
2018-08-29 14:01 ` Jens Axboe
2018-08-30 12:05 ` Ulf Hansson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180828154727.3589-1-ianwmorrison@gmail.com \
--to=ianwmorrison@gmail.com \
--cc=axboe@kernel.dk \
--cc=bart.vanassche@wdc.com \
--cc=hare@suse.de \
--cc=hch@lst.de \
--cc=kashyap.desai@broadcom.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=loberman@redhat.com \
--cc=ming.lei@redhat.com \
--cc=osandov@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).