From: Hannes Reinecke <hare@suse.de>
To: Jens Axboe <axboe@kernel.dk>, Omar Sandoval <osandov@osandov.com>,
Paolo Valente <paolo.valente@linaro.org>
Cc: Tejun Heo <tj@kernel.org>,
linux-block@vger.kernel.org, linux-kernel@vger.kernel.org,
ulf.hansson@linaro.org, linus.walleij@linaro.org,
broonie@kernel.org
Subject: Re: [PATCH BUGFIX] block: make elevator_get robust against cross blk/blk-mq choice
Date: Tue, 14 Feb 2017 07:58:22 +0100 [thread overview]
Message-ID: <d6e69d7b-dc69-90ec-0130-dc774fd4da2a@suse.de> (raw)
In-Reply-To: <89b98d59-fcae-6b13-a6a1-6fe62967929d@kernel.dk>
On 02/13/2017 11:28 PM, Jens Axboe wrote:
> On 02/13/2017 03:09 PM, Omar Sandoval wrote:
>> On Mon, Feb 13, 2017 at 10:01:07PM +0100, Paolo Valente wrote:
>>> If, at boot, a legacy I/O scheduler is chosen for a device using blk-mq,
>>> or, viceversa, a blk-mq scheduler is chosen for a device using blk, then
>>> that scheduler is set and initialized without any check, driving the
>>> system into an inconsistent state. This commit addresses this issue by
>>> letting elevator_get fail for these wrong cross choices.
>>>
>>> Signed-off-by: Paolo Valente <paolo.valente@linaro.org>
>>> ---
>>> block/elevator.c | 26 ++++++++++++++++++--------
>>> 1 file changed, 18 insertions(+), 8 deletions(-)
>>
>> Hey, Paolo,
>>
>> How exactly are you triggering this? In __elevator_change(), we do check
>> for mq or not mq:
>>
>> if (!e->uses_mq && q->mq_ops) {
>> elevator_put(e);
>> return -EINVAL;
>> }
>> if (e->uses_mq && !q->mq_ops) {
>> elevator_put(e);
>> return -EINVAL;
>> }
>>
>> We don't ever appear to call elevator_init() with a specific scheduler
>> name, and for the default we switch off of q->mq_ops and use the
>> defaults from Kconfig:
>>
>> if (q->mq_ops && q->nr_hw_queues == 1)
>> e = elevator_get(CONFIG_DEFAULT_SQ_IOSCHED, false);
>> else if (q->mq_ops)
>> e = elevator_get(CONFIG_DEFAULT_MQ_IOSCHED, false);
>> else
>> e = elevator_get(CONFIG_DEFAULT_IOSCHED, false);
>>
>> if (!e) {
>> printk(KERN_ERR
>> "Default I/O scheduler not found. " \
>> "Using noop/none.\n");
>> e = elevator_get("noop", false);
>> }
>>
>> So I guess this could happen if someone manually changed those Kconfig
>> options, but I don't see what other case would make this happen, could
>> you please explain?
>
> Was wondering the same - is it using the 'elevator=' boot parameter?
> Didn't look at that path just now, but that's the only one I could
> think of. If it is, I'd much prefer only using 'chosen_elevator' for
> the non-mq stuff, and the fix should be just that instead.
>
[ .. ]
While we're at the topic:
Can't we use the same names for legacy and mq scheduler?
It's quite an unnecessary complication to have
'noop', 'deadline', and 'cfq' for legacy, but 'none' and 'mq-deadline'
for mq. If we could use 'noop' and 'deadline' for mq, too, the existing
settings or udev rules will continue to work and we wouldn't get any
annoying and pointless warnings here...
Cheers,
Hannes
--
Dr. Hannes Reinecke Teamlead Storage & Networking
hare@suse.de +49 911 74053 688
SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton
HRB 21284 (AG Nürnberg)
next prev parent reply other threads:[~2017-02-14 6:58 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-13 21:01 [PATCH BUGFIX] attempt to fix wrong scheduler selection Paolo Valente
2017-02-13 21:01 ` [PATCH BUGFIX] block: make elevator_get robust against cross blk/blk-mq choice Paolo Valente
2017-02-13 21:12 ` Bart Van Assche
2017-02-13 22:09 ` Omar Sandoval
2017-02-13 22:28 ` Jens Axboe
2017-02-13 23:10 ` Jens Axboe
2017-02-14 8:14 ` Paolo Valente
2017-02-14 15:16 ` Jens Axboe
2017-02-14 15:48 ` Paolo Valente
2017-02-14 6:58 ` Hannes Reinecke [this message]
2017-02-14 7:07 ` Omar Sandoval
2017-02-14 7:11 ` Hannes Reinecke
2017-02-14 15:13 ` Jens Axboe
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=d6e69d7b-dc69-90ec-0130-dc774fd4da2a@suse.de \
--to=hare@suse.de \
--cc=axboe@kernel.dk \
--cc=broonie@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=osandov@osandov.com \
--cc=paolo.valente@linaro.org \
--cc=tj@kernel.org \
--cc=ulf.hansson@linaro.org \
/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
all inboxes | Powered by JetHome®