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