From: Damien Le Moal <damien.lemoal@wdc.com>
To: linux-block@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
linux-scsi@vger.kernel.org,
"Martin K . Petersen" <martin.petersen@oracle.com>
Subject: [PATCH v3 2/7] block: Change elevator_init_mq() to always succeed
Date: Wed, 4 Sep 2019 17:42:42 +0900 [thread overview]
Message-ID: <20190904084247.23338-3-damien.lemoal@wdc.com> (raw)
In-Reply-To: <20190904084247.23338-1-damien.lemoal@wdc.com>
If the default elevator chosen is mq-deadline, elevator_init_mq() may
return an error if mq-deadline initialization fails, leading to
blk_mq_init_allocated_queue() returning an error, which in turn will
cause the block device initialization to fail and the device not being
exposed.
Instead of taking such extreme measure, handle mq-deadline
initialization failures in the same manner as when mq-deadline is not
available (no module to load), that is, default to the "none" scheduler.
With this change, elevator_init_mq() return type can be changed to void.
Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: Christoph Hellwig <hch@lst.de>
---
block/blk-mq.c | 8 +-------
block/blk.h | 2 +-
block/elevator.c | 23 ++++++++++++-----------
3 files changed, 14 insertions(+), 19 deletions(-)
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 13923630e00a..ee4caf0c0807 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -2842,8 +2842,6 @@ static unsigned int nr_hw_queues(struct blk_mq_tag_set *set)
struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,
struct request_queue *q)
{
- int ret = -ENOMEM;
-
/* mark the queue as mq asap */
q->mq_ops = set->ops;
@@ -2904,14 +2902,10 @@ struct request_queue *blk_mq_init_allocated_queue(struct blk_mq_tag_set *set,
blk_mq_add_queue_tag_set(set, q);
blk_mq_map_swqueue(q);
- ret = elevator_init_mq(q);
- if (ret)
- goto err_tag_set;
+ elevator_init_mq(q);
return q;
-err_tag_set:
- blk_mq_del_queue_tag_set(q);
err_hctxs:
kfree(q->queue_hw_ctx);
q->nr_hw_queues = 0;
diff --git a/block/blk.h b/block/blk.h
index e4619fc5c99a..ed347f7a97b1 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -184,7 +184,7 @@ void blk_account_io_done(struct request *req, u64 now);
void blk_insert_flush(struct request *rq);
-int elevator_init_mq(struct request_queue *q);
+void elevator_init_mq(struct request_queue *q);
int elevator_switch_mq(struct request_queue *q,
struct elevator_type *new_e);
void __elevator_exit(struct request_queue *, struct elevator_queue *);
diff --git a/block/elevator.c b/block/elevator.c
index 4721834815bb..2944c129760c 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -628,34 +628,35 @@ static inline bool elv_support_iosched(struct request_queue *q)
/*
* For blk-mq devices supporting IO scheduling, we default to using mq-deadline,
- * if available, for single queue devices. If deadline isn't available OR we
- * have multiple queues, default to "none".
+ * if available, for single queue devices. If deadline isn't available OR
+ * deadline initialization fails OR we have multiple queues, default to "none".
*/
-int elevator_init_mq(struct request_queue *q)
+void elevator_init_mq(struct request_queue *q)
{
struct elevator_type *e;
- int err = 0;
+ int err;
if (!elv_support_iosched(q))
- return 0;
+ return;
if (q->nr_hw_queues != 1)
- return 0;
+ return;
WARN_ON_ONCE(test_bit(QUEUE_FLAG_REGISTERED, &q->queue_flags));
if (unlikely(q->elevator))
- goto out;
+ return;
e = elevator_get(q, "mq-deadline", false);
if (!e)
- goto out;
+ return;
err = blk_mq_init_sched(q, e);
- if (err)
+ if (err) {
+ pr_warn("\"%s\" elevator initialization failed, "
+ "falling back to \"none\"\n", e->elevator_name);
elevator_put(e);
-out:
- return err;
+ }
}
--
2.21.0
next prev parent reply other threads:[~2019-09-04 8:43 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-04 8:42 [PATCH v3 0/7] Elevator cleanups and improvements Damien Le Moal
2019-09-04 8:42 ` [PATCH v3 1/7] block: Cleanup elevator_init_mq() use Damien Le Moal
2019-09-04 9:02 ` Ming Lei
2019-09-04 8:42 ` Damien Le Moal [this message]
2019-09-04 9:05 ` [PATCH v3 2/7] block: Change elevator_init_mq() to always succeed Ming Lei
2019-09-04 8:42 ` [PATCH v3 3/7] block: Introduce elevator features Damien Le Moal
2019-09-04 8:42 ` [PATCH v3 4/7] block: Improve default elevator selection Damien Le Moal
2019-09-04 8:51 ` Johannes Thumshirn
2019-09-04 8:42 ` [PATCH v3 5/7] block: Delay default elevator initialization Damien Le Moal
2019-09-04 8:56 ` Johannes Thumshirn
2019-09-04 9:02 ` Damien Le Moal
2019-09-04 12:56 ` Jens Axboe
2019-09-05 4:30 ` Damien Le Moal
2019-09-04 9:29 ` Ming Lei
2019-09-04 9:29 ` Ming Lei
2019-09-04 8:42 ` [PATCH v3 6/7] block: Set ELEVATOR_F_ZBD_SEQ_WRITE for nullblk zoned disks Damien Le Moal
2019-09-04 8:52 ` Johannes Thumshirn
2019-09-04 8:42 ` [PATCH v3 7/7] sd: Set ELEVATOR_F_ZBD_SEQ_WRITE for ZBC disks Damien Le Moal
2019-09-04 8:52 ` Johannes Thumshirn
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=20190904084247.23338-3-damien.lemoal@wdc.com \
--to=damien.lemoal@wdc.com \
--cc=axboe@kernel.dk \
--cc=linux-block@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.