1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Mon, 25 Nov 2019 22:53:25 +0100
Subject: [PATCH] ZEN: Add CONFIG to rename the mq-deadline scheduler
Increase ELV_NAME_MAX to 24 so we can support our longer IO scheduler names.
---
block/Kconfig.iosched | 9 +++++++++
block/elevator.c | 4 ++++
block/elevator.h | 2 +-
block/mq-deadline.c | 9 +++++++++
4 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/block/Kconfig.iosched b/block/Kconfig.iosched
index 6155161460862cc978c022e5b2147e32e3b45ce8..1c88a9279d1776e6124d9c2b81fce95954cac4da 100644
--- a/block/Kconfig.iosched
+++ b/block/Kconfig.iosched
@@ -7,6 +7,15 @@ config MQ_IOSCHED_DEADLINE
help
MQ version of the deadline IO scheduler.
+config MQ_IOSCHED_DEADLINE_NODEFAULT
+ bool "Rename mq-deadline scheduler to mq-deadline-nodefault"
+ depends on MQ_IOSCHED_DEADLINE
+ default n
+ help
+ This renames the mq-deadline scheduler to "mq-deadline-nodefault" and
+ also drops its alias of "deadline". This can prevent existing
+ userspace from forcing this scheduler over the kernel's choice.
+
config MQ_IOSCHED_KYBER
tristate "Kyber I/O scheduler"
default y
diff --git a/block/elevator.c b/block/elevator.c
index c319765892bb90f00162cb6cac03f8d5434e64b2..1f14fda7597de2e7cbacea73c84e6886fb79db3d 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -642,7 +642,11 @@ static struct elevator_type *elevator_get_default(struct request_queue *q)
!blk_mq_is_shared_tags(q->tag_set->flags))
return NULL;
+#if defined(CONFIG_MQ_IOSCHED_DEADLINE_NODEFAULT)
+ return elevator_get(q, "mq-deadline-nodefault", false);
+#else
return elevator_get(q, "mq-deadline", false);
+#endif
}
/*
diff --git a/block/elevator.h b/block/elevator.h
index 16cd8bdedb7eac633636e4325c91ddb552a5632a..8d488775faaf966a93a9185e524bece40c1d6ad7 100644
--- a/block/elevator.h
+++ b/block/elevator.h
@@ -48,7 +48,7 @@ struct elevator_mq_ops {
void (*exit_icq)(struct io_cq *);
};
-#define ELV_NAME_MAX (16)
+#define ELV_NAME_MAX (24)
struct elv_fs_entry {
struct attribute attr;
diff --git a/block/mq-deadline.c b/block/mq-deadline.c
index 6ed602b2f80a5904892717bd2bbe19203045260a..ac7e050c987d7dccff31dc33b0bb1fae67591c8f 100644
--- a/block/mq-deadline.c
+++ b/block/mq-deadline.c
@@ -1148,12 +1148,21 @@ static struct elevator_type mq_deadline = {
.queue_debugfs_attrs = deadline_queue_debugfs_attrs,
#endif
.elevator_attrs = deadline_attrs,
+#ifdef CONFIG_MQ_IOSCHED_DEADLINE_NODEFAULT
+ .elevator_name = "mq-deadline-nodefault",
+ .elevator_alias = "deadline-nodefault",
+#else
.elevator_name = "mq-deadline",
.elevator_alias = "deadline",
+#endif
.elevator_features = ELEVATOR_F_ZBD_SEQ_WRITE,
.elevator_owner = THIS_MODULE,
};
+#ifdef CONFIG_MQ_IOSCHED_DEADLINE_NODEFAULT
+MODULE_ALIAS("mq-deadline-nodefault-iosched");
+#else
MODULE_ALIAS("mq-deadline-iosched");
+#endif
static int __init deadline_init(void)
{
|