]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
block layer: elv_iosched_show should get elv_list_lock
authorVasily Tarasov <vtaras@openvz.org>
Wed, 29 Nov 2006 13:04:14 +0000 (14:04 +0100)
committerAdrian Bunk <bunk@stusta.de>
Wed, 29 Nov 2006 13:04:14 +0000 (14:04 +0100)
elv_iosched_show function iterates other elv_list,
hence elv_list_lock should be got.

Also the question is: in elv_iosched_show, elv_iosched_store
q->elevator->elevator_type construction is used without locking q->queue_lock.
Is it expected?..

Signed-off-by: Vasily Tarasov <vtaras@openvz.org>
Acked-by: Jens Axboe <jens.axboe@oracle.com>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
block/elevator.c

index ef1e606ab16677616f34cf0d089dcff264dc3d88..11e356e440f053a2ef7b8373a9b354992245913a 100644 (file)
@@ -814,7 +814,7 @@ ssize_t elv_iosched_show(request_queue_t *q, char *name)
        struct list_head *entry;
        int len = 0;
 
-       spin_lock_irq(q->queue_lock);
+       spin_lock_irq(&elv_list_lock);
        list_for_each(entry, &elv_list) {
                struct elevator_type *__e;
 
@@ -824,7 +824,7 @@ ssize_t elv_iosched_show(request_queue_t *q, char *name)
                else
                        len += sprintf(name+len, "%s ", __e->elevator_name);
        }
-       spin_unlock_irq(q->queue_lock);
+       spin_unlock_irq(&elv_list_lock);
 
        len += sprintf(len+name, "\n");
        return len;