X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=block%2Felevator.c;h=7be96bbe142c6f62c17da02688a0600aaa3acf9a;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=8ed284691c0bc69aa3be19d1db52b6b9f3c768da;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/block/elevator.c b/block/elevator.c index 8ed284691..7be96bbe1 100644 --- a/block/elevator.c +++ b/block/elevator.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -850,9 +851,12 @@ fail_register: * one again (along with re-adding the sysfs dir) */ elevator_exit(e); + e = NULL; q->elevator = old_elevator; elv_register_queue(q); clear_bit(QUEUE_FLAG_ELVSWITCH, &q->queue_flags); + if (e) + kobject_put(&e->kobj); return 0; } @@ -892,7 +896,7 @@ ssize_t elv_iosched_show(request_queue_t *q, char *name) struct list_head *entry; int len = 0; - spin_lock_irq(&elv_list_lock); + spin_lock_irq(q->queue_lock); list_for_each(entry, &elv_list) { struct elevator_type *__e; @@ -902,7 +906,7 @@ ssize_t elv_iosched_show(request_queue_t *q, char *name) else len += sprintf(name+len, "%s ", __e->elevator_name); } - spin_unlock_irq(&elv_list_lock); + spin_unlock_irq(q->queue_lock); len += sprintf(len+name, "\n"); return len;