Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block
* 'for-linus' of git://git.kernel.dk/linux-2.6-block: elevator: fix oops on early call to elevator_change()
This commit is contained in:
commit
c8d86d8ac4
@ -938,6 +938,7 @@ int elv_register_queue(struct request_queue *q)
|
||||
}
|
||||
}
|
||||
kobject_uevent(&e->kobj, KOBJ_ADD);
|
||||
e->registered = 1;
|
||||
}
|
||||
return error;
|
||||
}
|
||||
@ -947,6 +948,7 @@ static void __elv_unregister_queue(struct elevator_queue *e)
|
||||
{
|
||||
kobject_uevent(&e->kobj, KOBJ_REMOVE);
|
||||
kobject_del(&e->kobj);
|
||||
e->registered = 0;
|
||||
}
|
||||
|
||||
void elv_unregister_queue(struct request_queue *q)
|
||||
@ -1042,11 +1044,13 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e)
|
||||
|
||||
spin_unlock_irq(q->queue_lock);
|
||||
|
||||
__elv_unregister_queue(old_elevator);
|
||||
if (old_elevator->registered) {
|
||||
__elv_unregister_queue(old_elevator);
|
||||
|
||||
err = elv_register_queue(q);
|
||||
if (err)
|
||||
goto fail_register;
|
||||
err = elv_register_queue(q);
|
||||
if (err)
|
||||
goto fail_register;
|
||||
}
|
||||
|
||||
/*
|
||||
* finally exit old elevator and turn off BYPASS.
|
||||
|
@ -93,6 +93,7 @@ struct elevator_queue
|
||||
struct elevator_type *elevator_type;
|
||||
struct mutex sysfs_lock;
|
||||
struct hlist_head *hash;
|
||||
unsigned int registered:1;
|
||||
};
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user