diff options
author | Pavel <pavel@ucw.cz> | 2018-10-28 12:50:28 +0100 |
---|---|---|
committer | Pavel <pavel@ucw.cz> | 2019-01-07 11:22:31 +0100 |
commit | 09c6a163e103a90656a6a74e6e09fe16be8d3c8c (patch) | |
tree | b46b505cb26afe3da422c82369f4624af7e85a3b | |
parent | 667396b6eafcb1f02d7f66f9b0025e0bef8ceda9 (diff) | |
download | linux-k-09c6a163e103a90656a6a74e6e09fe16be8d3c8c.tar.gz |
hack: Switch to bfq for now.
-rw-r--r-- | block/elevator.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/block/elevator.c b/block/elevator.c index f05e90d4e695a3..9e52d26f9e6740 100644 --- a/block/elevator.c +++ b/block/elevator.c @@ -596,13 +596,16 @@ out: } /* - * For blk-mq devices, 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". + * For blk-mq devices, we default to using: + * - "none" for multiqueue devices (nr_hw_queues != 1) + * - "bfq", if available, for single queue devices + * - "mq-deadline" if "bfq" is not available for single queue devices + * - "none" for single queue devices as well as last resort */ int elevator_init_mq(struct request_queue *q) { struct elevator_type *e; + const char *policy; int err = 0; if (q->nr_hw_queues != 1) @@ -616,7 +619,18 @@ int elevator_init_mq(struct request_queue *q) if (unlikely(q->elevator)) goto out_unlock; - e = elevator_get(q, "mq-deadline", false); + /* + * Zoned devices must use a deadline scheduler because currently + * that is the only scheduler respecting zoned writes. + */ + if (blk_queue_is_zoned(q)) + policy = "mq-deadline"; + else if (IS_ENABLED(CONFIG_IOSCHED_BFQ)) + policy = "bfq"; + else + policy = "mq-deadline"; + + e = elevator_get(q, policy, false); if (!e) goto out_unlock; |