]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
elevator: fix loading wrong elevator type for blk-mq devices
authorJens Axboe <axboe@fb.com>
Tue, 14 Feb 2017 15:16:41 +0000 (08:16 -0700)
committerJens Axboe <axboe@fb.com>
Tue, 14 Feb 2017 15:16:41 +0000 (08:16 -0700)
The old elevator= boot parameter blindly attempts to load the
same scheduler for mq and !mq devices, leading to a crash if
we specify the wrong one.

Ensure that we only apply this boot parameter to old !mq devices.

Signed-off-by: Jens Axboe <axboe@fb.com>
block/elevator.c

index ef7f59469acc7f313d3444545c9c5835efe81cc7..b2a55167f0c214f48d9c99b0e601461ab24f5518 100644 (file)
@@ -207,11 +207,12 @@ int elevator_init(struct request_queue *q, char *name)
        }
 
        /*
-        * Use the default elevator specified by config boot param or
-        * config option.  Don't try to load modules as we could be running
-        * off async and request_module() isn't allowed from async.
+        * Use the default elevator specified by config boot param for
+        * non-mq devices, or by config option. Don't try to load modules
+        * as we could be running off async and request_module() isn't
+        * allowed from async.
         */
-       if (!e && *chosen_elevator) {
+       if (!e && !q->mq_ops && *chosen_elevator) {
                e = elevator_get(chosen_elevator, false);
                if (!e)
                        printk(KERN_ERR "I/O scheduler %s not found\n",