blk-mq-sched: fix starvation for multiple hardware queues and shared tags
authorJens Axboe <axboe@fb.com>
Thu, 26 Jan 2017 21:42:34 +0000 (14:42 -0700)
committerJens Axboe <axboe@fb.com>
Fri, 27 Jan 2017 15:20:34 +0000 (08:20 -0700)
commit50e1dab86aa2c10cbca2f754aae9542169403141
tree2e17cd0d604bf63d82e4f8838b57ec579690ca52
parent99cf1dc580f0766825395aae4f60ec1d8438f011
blk-mq-sched: fix starvation for multiple hardware queues and shared tags

If we have both multiple hardware queues and shared tag map between
devices, we need to ensure that we propagate the hardware queue
restart bit higher up. This is because we can get into a situation
where we don't have any IO pending on a hardware queue, yet we fail
getting a tag to start new IO. If that happens, it's not enough to
mark the hardware queue as needing a restart, we need to bubble
that up to the higher level queue as well.

Signed-off-by: Jens Axboe <axboe@fb.com>
Reviewed-by: Omar Sandoval <osandov@fb.com>
Tested-by: Hannes Reinecke <hare@suse.com>
block/blk-mq-sched.c
block/blk-mq-sched.h
block/blk-mq.c
block/blk-mq.h
include/linux/blkdev.h