summaryrefslogtreecommitdiffstats
path: root/block/elevator.c
diff options
context:
space:
mode:
authorJens Axboe <axboe@fb.com>2017-03-02 21:59:08 +0100
committerJens Axboe <axboe@fb.com>2017-03-02 21:59:08 +0100
commit7b36a7189fc320f0b783dd51bd1f541db56cfbdd (patch)
treec527bc3477255dfc0064390f2073533c6a652c2b /block/elevator.c
parentblock: Initialize bd_bdi on inode initialization (diff)
downloadlinux-7b36a7189fc320f0b783dd51bd1f541db56cfbdd.tar.xz
linux-7b36a7189fc320f0b783dd51bd1f541db56cfbdd.zip
block: don't call ioc_exit_icq() with the queue lock held for blk-mq
For legacy scheduling, we always call ioc_exit_icq() with both the ioc and queue lock held. This poses a problem for blk-mq with scheduling, since the queue lock isn't what we use in the scheduler. And since we don't need the queue lock held for ioc exit there, don't grab it and leave any extra locking up to the blk-mq scheduler. Reported-by: Paolo Valente <paolo.valente@linaro.org> Tested-by: Paolo Valente <paolo.valente@linaro.org> Reviewed-by: Omar Sandoval <osandov@fb.com> Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block/elevator.c')
-rw-r--r--block/elevator.c2
1 files changed, 0 insertions, 2 deletions
diff --git a/block/elevator.c b/block/elevator.c
index ac1c9f481a98..01139f549b5b 100644
--- a/block/elevator.c
+++ b/block/elevator.c
@@ -983,9 +983,7 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e)
if (old_registered)
elv_unregister_queue(q);
- spin_lock_irq(q->queue_lock);
ioc_clear_queue(q);
- spin_unlock_irq(q->queue_lock);
}
/* allocate, init and register new elevator */