|
@@ -965,7 +965,7 @@ fail_init:
|
|
|
/*
|
|
|
* Switch this queue to the given IO scheduler.
|
|
|
*/
|
|
|
-int elevator_change(struct request_queue *q, const char *name)
|
|
|
+static int __elevator_change(struct request_queue *q, const char *name)
|
|
|
{
|
|
|
char elevator_name[ELV_NAME_MAX];
|
|
|
struct elevator_type *e;
|
|
@@ -987,6 +987,18 @@ int elevator_change(struct request_queue *q, const char *name)
|
|
|
|
|
|
return elevator_switch(q, e);
|
|
|
}
|
|
|
+
|
|
|
+int elevator_change(struct request_queue *q, const char *name)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ /* Protect q->elevator from elevator_init() */
|
|
|
+ mutex_lock(&q->sysfs_lock);
|
|
|
+ ret = __elevator_change(q, name);
|
|
|
+ mutex_unlock(&q->sysfs_lock);
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
EXPORT_SYMBOL(elevator_change);
|
|
|
|
|
|
ssize_t elv_iosched_store(struct request_queue *q, const char *name,
|
|
@@ -997,7 +1009,7 @@ ssize_t elv_iosched_store(struct request_queue *q, const char *name,
|
|
|
if (!q->elevator)
|
|
|
return count;
|
|
|
|
|
|
- ret = elevator_change(q, name);
|
|
|
+ ret = __elevator_change(q, name);
|
|
|
if (!ret)
|
|
|
return count;
|
|
|
|