diff options
-rw-r--r-- | block/elevator.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/block/elevator.c b/block/elevator.c index bafbae0344d3..88318c383608 100644 --- a/block/elevator.c +++ b/block/elevator.c | |||
@@ -134,6 +134,21 @@ static struct elevator_type *elevator_get(const char *name) | |||
134 | spin_lock(&elv_list_lock); | 134 | spin_lock(&elv_list_lock); |
135 | 135 | ||
136 | e = elevator_find(name); | 136 | e = elevator_find(name); |
137 | if (!e) { | ||
138 | char elv[ELV_NAME_MAX + strlen("-iosched")]; | ||
139 | |||
140 | spin_unlock(&elv_list_lock); | ||
141 | |||
142 | if (!strcmp(name, "anticipatory")) | ||
143 | sprintf(elv, "as-iosched"); | ||
144 | else | ||
145 | sprintf(elv, "%s-iosched", name); | ||
146 | |||
147 | request_module(elv); | ||
148 | spin_lock(&elv_list_lock); | ||
149 | e = elevator_find(name); | ||
150 | } | ||
151 | |||
137 | if (e && !try_module_get(e->elevator_owner)) | 152 | if (e && !try_module_get(e->elevator_owner)) |
138 | e = NULL; | 153 | e = NULL; |
139 | 154 | ||