aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel <pavel@ucw.cz>2018-10-28 12:50:28 +0100
committerPavel <pavel@ucw.cz>2019-01-07 11:22:31 +0100
commit09c6a163e103a90656a6a74e6e09fe16be8d3c8c (patch)
treeb46b505cb26afe3da422c82369f4624af7e85a3b
parent667396b6eafcb1f02d7f66f9b0025e0bef8ceda9 (diff)
downloadlinux-k-09c6a163e103a90656a6a74e6e09fe16be8d3c8c.tar.gz
hack: Switch to bfq for now.
-rw-r--r--block/elevator.c22
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;