diff options
author | Ming Lei <ming.lei@redhat.com> | 2017-04-15 08:38:22 -0400 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2017-04-19 16:15:43 -0400 |
commit | 3a5088c8c11ac9d56f7e90acaaae9e0e98c1ff94 (patch) | |
tree | ea83e5447676e30b767103c665668932656c239b | |
parent | 005882e53d62f25dae10351a8d3f13326051e8f5 (diff) |
block: respect BLK_MQ_F_NO_SCHED
If one driver claims that it doesn't support io scheduler via
BLK_MQ_F_NO_SCHED, we should not allow to change and show the
availabe io schedulers.
This patch adds check to enhance this behaviour.
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r-- | block/elevator.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/block/elevator.c b/block/elevator.c index dbeecf7be719..4d9084a14c10 100644 --- a/block/elevator.c +++ b/block/elevator.c | |||
@@ -1098,12 +1098,20 @@ int elevator_change(struct request_queue *q, const char *name) | |||
1098 | } | 1098 | } |
1099 | EXPORT_SYMBOL(elevator_change); | 1099 | EXPORT_SYMBOL(elevator_change); |
1100 | 1100 | ||
1101 | static inline bool elv_support_iosched(struct request_queue *q) | ||
1102 | { | ||
1103 | if (q->mq_ops && q->tag_set && (q->tag_set->flags & | ||
1104 | BLK_MQ_F_NO_SCHED)) | ||
1105 | return false; | ||
1106 | return true; | ||
1107 | } | ||
1108 | |||
1101 | ssize_t elv_iosched_store(struct request_queue *q, const char *name, | 1109 | ssize_t elv_iosched_store(struct request_queue *q, const char *name, |
1102 | size_t count) | 1110 | size_t count) |
1103 | { | 1111 | { |
1104 | int ret; | 1112 | int ret; |
1105 | 1113 | ||
1106 | if (!(q->mq_ops || q->request_fn)) | 1114 | if (!(q->mq_ops || q->request_fn) || !elv_support_iosched(q)) |
1107 | return count; | 1115 | return count; |
1108 | 1116 | ||
1109 | ret = __elevator_change(q, name); | 1117 | ret = __elevator_change(q, name); |
@@ -1135,7 +1143,7 @@ ssize_t elv_iosched_show(struct request_queue *q, char *name) | |||
1135 | len += sprintf(name+len, "[%s] ", elv->elevator_name); | 1143 | len += sprintf(name+len, "[%s] ", elv->elevator_name); |
1136 | continue; | 1144 | continue; |
1137 | } | 1145 | } |
1138 | if (__e->uses_mq && q->mq_ops) | 1146 | if (__e->uses_mq && q->mq_ops && elv_support_iosched(q)) |
1139 | len += sprintf(name+len, "%s ", __e->elevator_name); | 1147 | len += sprintf(name+len, "%s ", __e->elevator_name); |
1140 | else if (!__e->uses_mq && !q->mq_ops) | 1148 | else if (!__e->uses_mq && !q->mq_ops) |
1141 | len += sprintf(name+len, "%s ", __e->elevator_name); | 1149 | len += sprintf(name+len, "%s ", __e->elevator_name); |