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()

+9 -4
+8 -4
block/elevator.c
··· 938 } 939 } 940 kobject_uevent(&e->kobj, KOBJ_ADD); 941 } 942 return error; 943 } ··· 948 { 949 kobject_uevent(&e->kobj, KOBJ_REMOVE); 950 kobject_del(&e->kobj); 951 } 952 953 void elv_unregister_queue(struct request_queue *q) ··· 1044 1045 spin_unlock_irq(q->queue_lock); 1046 1047 - __elv_unregister_queue(old_elevator); 1048 1049 - err = elv_register_queue(q); 1050 - if (err) 1051 - goto fail_register; 1052 1053 /* 1054 * finally exit old elevator and turn off BYPASS.
··· 938 } 939 } 940 kobject_uevent(&e->kobj, KOBJ_ADD); 941 + e->registered = 1; 942 } 943 return error; 944 } ··· 947 { 948 kobject_uevent(&e->kobj, KOBJ_REMOVE); 949 kobject_del(&e->kobj); 950 + e->registered = 0; 951 } 952 953 void elv_unregister_queue(struct request_queue *q) ··· 1042 1043 spin_unlock_irq(q->queue_lock); 1044 1045 + if (old_elevator->registered) { 1046 + __elv_unregister_queue(old_elevator); 1047 1048 + err = elv_register_queue(q); 1049 + if (err) 1050 + goto fail_register; 1051 + } 1052 1053 /* 1054 * finally exit old elevator and turn off BYPASS.
+1
include/linux/elevator.h
··· 93 struct elevator_type *elevator_type; 94 struct mutex sysfs_lock; 95 struct hlist_head *hash; 96 }; 97 98 /*
··· 93 struct elevator_type *elevator_type; 94 struct mutex sysfs_lock; 95 struct hlist_head *hash; 96 + unsigned int registered:1; 97 }; 98 99 /*