|
@@ -150,7 +150,7 @@ void __init load_default_elevator_module(void)
|
|
|
|
|
|
static struct kobj_type elv_ktype;
|
|
|
|
|
|
-static struct elevator_queue *elevator_alloc(struct request_queue *q,
|
|
|
+struct elevator_queue *elevator_alloc(struct request_queue *q,
|
|
|
struct elevator_type *e)
|
|
|
{
|
|
|
struct elevator_queue *eq;
|
|
@@ -170,6 +170,7 @@ err:
|
|
|
elevator_put(e);
|
|
|
return NULL;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(elevator_alloc);
|
|
|
|
|
|
static void elevator_release(struct kobject *kobj)
|
|
|
{
|
|
@@ -221,16 +222,7 @@ int elevator_init(struct request_queue *q, char *name)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- q->elevator = elevator_alloc(q, e);
|
|
|
- if (!q->elevator)
|
|
|
- return -ENOMEM;
|
|
|
-
|
|
|
- err = e->ops.elevator_init_fn(q);
|
|
|
- if (err) {
|
|
|
- kobject_put(&q->elevator->kobj);
|
|
|
- return err;
|
|
|
- }
|
|
|
-
|
|
|
+ err = e->ops.elevator_init_fn(q, e);
|
|
|
return 0;
|
|
|
}
|
|
|
EXPORT_SYMBOL(elevator_init);
|
|
@@ -935,16 +927,9 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e)
|
|
|
spin_unlock_irq(q->queue_lock);
|
|
|
|
|
|
/* allocate, init and register new elevator */
|
|
|
- err = -ENOMEM;
|
|
|
- q->elevator = elevator_alloc(q, new_e);
|
|
|
- if (!q->elevator)
|
|
|
- goto fail_init;
|
|
|
-
|
|
|
- err = new_e->ops.elevator_init_fn(q);
|
|
|
- if (err) {
|
|
|
- kobject_put(&q->elevator->kobj);
|
|
|
+ err = new_e->ops.elevator_init_fn(q, new_e);
|
|
|
+ if (err)
|
|
|
goto fail_init;
|
|
|
- }
|
|
|
|
|
|
if (registered) {
|
|
|
err = elv_register_queue(q);
|